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