mbox series

[00/14] Direct mapped extended attribute data

Message ID 20241229133836.1194272-1-aalbersh@kernel.org (mailing list archive)
Headers show
Series Direct mapped extended attribute data | expand

Message

Andrey Albershteyn Dec. 29, 2024, 1:38 p.m. UTC
This patchset introduces new format for extended attribute leafs.
The main difference is that data block doesn't have any header and
that data has to be written through page cache.

The most useful part of the header, necessary for metadata
verification, is rm_crc. This field is moved into DA tree and
doubled in size as rm_crc[2].

rm_crc[2] stores both CRCs for data before IO completion (old data)
and after IO completion (new written data). This allow us to
transactionally update CRC in the DA block while updating attribute
data with writeback.

So far, the interface isn't useful by itself as it requires
additional iomap_begin callbacks. These are implemented by fsverity,
for example.

Andrey Albershteyn (13):
  iomap: add wrapper to pass readpage_ctx to read path
  iomap: add read path ioends for filesystem read verification
  iomap: introduce IOMAP_F_NO_MERGE for non-mergable ioends
  xfs: add incompat directly mapped xattr flag
  libxfs: add xfs_calc_chsum()
  libxfs: pass xfs_sb to xfs_attr3_leaf_name_remote()
  xfs: introduce XFS_DA_OP_EMPTY
  xfs: introduce workqueue for post read processing
  xfs: add interface to set CRC on leaf attributes
  xfs: introduce XFS_ATTRUPDATE_FLAGS operation
  xfs: add interface for page cache mapped remote xattrs
  xfs: parse both remote attr name on-disk formats
  xfs: enalbe XFS_SB_FEAT_INCOMPAT_DXATTR

Darrick J. Wong (1):
  xfs: do not use xfs_attr3_rmt_hdr for remote value blocks for dxattr

 fs/iomap/buffered-io.c          | 111 +++++++++++------
 fs/xfs/libxfs/xfs_attr.c        | 212 +++++++++++++++++++++++++++++++-
 fs/xfs/libxfs/xfs_attr.h        |  11 ++
 fs/xfs/libxfs/xfs_attr_leaf.c   | 135 +++++++++++++++-----
 fs/xfs/libxfs/xfs_attr_leaf.h   |   1 +
 fs/xfs/libxfs/xfs_attr_remote.c |  83 ++++++++++---
 fs/xfs/libxfs/xfs_attr_remote.h |   8 +-
 fs/xfs/libxfs/xfs_cksum.h       |  12 ++
 fs/xfs/libxfs/xfs_da_btree.h    |   5 +-
 fs/xfs/libxfs/xfs_da_format.h   |  18 ++-
 fs/xfs/libxfs/xfs_format.h      |   4 +-
 fs/xfs/libxfs/xfs_log_format.h  |   1 +
 fs/xfs/libxfs/xfs_ondisk.h      |   9 +-
 fs/xfs/libxfs/xfs_sb.c          |   2 +
 fs/xfs/libxfs/xfs_shared.h      |   1 +
 fs/xfs/scrub/attr.c             |   2 +-
 fs/xfs/scrub/attr_repair.c      |   3 +-
 fs/xfs/scrub/listxattr.c        |   3 +-
 fs/xfs/xfs_attr_inactive.c      |   4 +-
 fs/xfs/xfs_attr_item.c          |   6 +
 fs/xfs/xfs_attr_item.h          |   1 +
 fs/xfs/xfs_attr_list.c          |   3 +-
 fs/xfs/xfs_mount.h              |   3 +
 fs/xfs/xfs_stats.h              |   1 +
 fs/xfs/xfs_super.c              |   9 ++
 fs/xfs/xfs_trace.h              |   1 +
 include/linux/iomap.h           |  34 +++++
 27 files changed, 580 insertions(+), 103 deletions(-)