[PATCH 00/14] Direct mapped extended attribute data

Andrey Albershteyn
2024-12-29T13:38:59Z

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(-)

--
2.47.0