Hi all, There are a couple of significant changes that need to be made to the directory and xattr code before we can support online repairs of those data structures. The first change is because online repair is designed to use libxfs to create a replacement dir/xattr structure in a temporary file, and use atomic extent swapping to commit the corrected structure. To avoid the performance hit of walking every block of the new structure to rewrite the owner number before the swap, we instead change libxfs to allow callers of the dir and xattr code the ability to set an explicit owner number to be written into the header fields of any new blocks that are created. For regular operation this will be the directory inode number. The second change is to update the dir/xattr code to actually *check* the owner number in each block that is read off the disk, since we don't currently do that. If you're going to start using this mess, you probably ought to just pull from my git trees, which are linked below. This is an extraordinary way to destroy everything. Enjoy! Comments and questions are, as always, welcome. --D kernel git tree: https://git.kernel.org/cgit/linux/kernel/git/djwong/xfs-linux.git/log/?h=dirattr-validate-owners xfsprogs git tree: https://git.kernel.org/cgit/linux/kernel/git/djwong/xfsprogs-dev.git/log/?h=dirattr-validate-owners --- fs/xfs/libxfs/xfs_attr.c | 10 +- fs/xfs/libxfs/xfs_attr_leaf.c | 59 +++++++++++--- fs/xfs/libxfs/xfs_attr_leaf.h | 4 + fs/xfs/libxfs/xfs_attr_remote.c | 13 +-- fs/xfs/libxfs/xfs_bmap.c | 1 fs/xfs/libxfs/xfs_da_btree.c | 168 +++++++++++++++++++++++++++++++++++++++ fs/xfs/libxfs/xfs_da_btree.h | 3 + fs/xfs/libxfs/xfs_dir2.c | 5 + fs/xfs/libxfs/xfs_dir2.h | 4 + fs/xfs/libxfs/xfs_dir2_block.c | 44 ++++++---- fs/xfs/libxfs/xfs_dir2_data.c | 17 ++-- fs/xfs/libxfs/xfs_dir2_leaf.c | 99 ++++++++++++++++++----- fs/xfs/libxfs/xfs_dir2_node.c | 44 ++++++---- fs/xfs/libxfs/xfs_dir2_priv.h | 11 +-- fs/xfs/libxfs/xfs_swapext.c | 7 +- fs/xfs/scrub/attr.c | 1 fs/xfs/scrub/dabtree.c | 8 ++ fs/xfs/scrub/dir.c | 23 +++-- fs/xfs/scrub/readdir.c | 6 + fs/xfs/xfs_acl.c | 2 fs/xfs/xfs_attr_item.c | 1 fs/xfs/xfs_attr_list.c | 35 +++++++- fs/xfs/xfs_dir2_readdir.c | 6 + fs/xfs/xfs_ioctl.c | 2 fs/xfs/xfs_iops.c | 1 fs/xfs/xfs_trace.h | 7 +- fs/xfs/xfs_xattr.c | 2 27 files changed, 464 insertions(+), 119 deletions(-)