On Thu, Feb 09, 2023 at 01:01:18AM -0700, allison.henderson@xxxxxxxxxx wrote: > From: Allison Henderson <allison.henderson@xxxxxxxxxx> > > Hi all, > > This is the latest parent pointer attributes for xfs. > The goal of this patch set is to add a parent pointer attribute to each inode. > The attribute name containing the parent inode, generation, and directory > offset, while the attribute value contains the file name. This feature will > enable future optimizations for online scrub, shrink, nfs handles, verity, or > any other feature that could make use of quickly deriving an inodes path from > the mount point. For the entire series, Reviewed-by: Darrick J. Wong <djwong@xxxxxxxxxx> NOTE: This doesn't mean I'm merging this; it merely means that I've now read through and worked enough of the parent pointers code that I feel sufficiently comfortable with the changes to post my own additions and alterations. https://lore.kernel.org/linux-xfs/Y+6MxEgswrJMUNOI@magnolia/T/#t --D > > This set can be viewed on github here > https://github.com/allisonhenderson/xfs/tree/xfs_new_pptrsv9_r2 > > And the corresponding xfsprogs code is here > https://github.com/allisonhenderson/xfsprogs/tree/xfsprogs_new_pptrs_v9_r2 > > This set has been tested with the below parent pointers tests > https://lore.kernel.org/fstests/20221012013812.82161-1-catherine.hoang@xxxxxxxxxx/T/#t > > Updates since v8: > > xfs: parent pointer attribute creation > Fix xfs_parent_init to release log assist on alloc fail > Add slab cache for xfs_parent_defer > Fix xfs_create to release after unlock > Add xfs_parent_start and xfs_parent_finish wrappers > removed unused xfs_parent_name_irec and xfs_init_parent_name_irec > > xfs: add parent attributes to link > Start/finish wrapper updates > Fix xfs_link to disallow reservationless quotas > > xfs: add parent attributes to symlink > Fix xfs_symlink to release after unlock > Start/finish wrapper updates > > xfs: remove parent pointers in unlink > Start/finish wrapper updates > Add missing parent free > > xfs: Add parent pointers to rename > Start/finish wrapper updates > Fix rename to only grab logged xattr once > Fix xfs_rename to disallow reservationless quotas > Fix double unlock on dqattach fail > Move parent frees to out_release_wip > > xfs: Add parent pointers to xfs_cross_rename > Hoist parent pointers into rename > > Questions comments and feedback appreciated! > > Thanks all! > Allison > > Allison Henderson (28): > xfs: Add new name to attri/d > xfs: Increase XFS_DEFER_OPS_NR_INODES to 5 > xfs: Increase XFS_QM_TRANS_MAXDQS to 5 > xfs: Hold inode locks in xfs_ialloc > xfs: Hold inode locks in xfs_trans_alloc_dir > xfs: Hold inode locks in xfs_rename > xfs: Expose init_xattrs in xfs_create_tmpfile > xfs: get directory offset when adding directory name > xfs: get directory offset when removing directory name > xfs: get directory offset when replacing a directory name > xfs: add parent pointer support to attribute code > xfs: define parent pointer xattr format > xfs: Add xfs_verify_pptr > xfs: extend transaction reservations for parent attributes > xfs: parent pointer attribute creation > xfs: add parent attributes to link > xfs: add parent attributes to symlink > xfs: remove parent pointers in unlink > xfs: Indent xfs_rename > xfs: Add parent pointers to rename > xfs: Add parent pointers to xfs_cross_rename > xfs: Add the parent pointer support to the superblock version 5. > xfs: Add helper function xfs_attr_list_context_init > xfs: Filter XFS_ATTR_PARENT for getfattr > xfs: Add parent pointer ioctl > xfs: fix unit conversion error in xfs_log_calc_max_attrsetm_res > xfs: drop compatibility minimum log size computations for reflink > xfs: add xfs_trans_mod_sb tracing > > fs/xfs/Makefile | 2 + > fs/xfs/libxfs/xfs_attr.c | 71 ++++- > fs/xfs/libxfs/xfs_attr.h | 13 +- > fs/xfs/libxfs/xfs_da_btree.h | 3 + > fs/xfs/libxfs/xfs_da_format.h | 26 +- > fs/xfs/libxfs/xfs_defer.c | 28 +- > fs/xfs/libxfs/xfs_defer.h | 8 +- > fs/xfs/libxfs/xfs_dir2.c | 21 +- > fs/xfs/libxfs/xfs_dir2.h | 7 +- > fs/xfs/libxfs/xfs_dir2_block.c | 9 +- > fs/xfs/libxfs/xfs_dir2_leaf.c | 8 +- > fs/xfs/libxfs/xfs_dir2_node.c | 8 +- > fs/xfs/libxfs/xfs_dir2_sf.c | 6 + > fs/xfs/libxfs/xfs_format.h | 4 +- > fs/xfs/libxfs/xfs_fs.h | 75 ++++++ > fs/xfs/libxfs/xfs_log_format.h | 7 +- > fs/xfs/libxfs/xfs_log_rlimit.c | 53 ++++ > fs/xfs/libxfs/xfs_parent.c | 203 +++++++++++++++ > fs/xfs/libxfs/xfs_parent.h | 84 ++++++ > fs/xfs/libxfs/xfs_sb.c | 4 + > fs/xfs/libxfs/xfs_trans_resv.c | 324 +++++++++++++++++++---- > fs/xfs/libxfs/xfs_trans_space.h | 8 - > fs/xfs/scrub/attr.c | 4 +- > fs/xfs/xfs_attr_item.c | 142 ++++++++-- > fs/xfs/xfs_attr_item.h | 1 + > fs/xfs/xfs_attr_list.c | 17 +- > fs/xfs/xfs_dquot.c | 38 +++ > fs/xfs/xfs_dquot.h | 1 + > fs/xfs/xfs_file.c | 1 + > fs/xfs/xfs_inode.c | 447 +++++++++++++++++++++++++------- > fs/xfs/xfs_inode.h | 3 +- > fs/xfs/xfs_ioctl.c | 148 +++++++++-- > fs/xfs/xfs_ioctl.h | 2 + > fs/xfs/xfs_iops.c | 3 +- > fs/xfs/xfs_ondisk.h | 4 + > fs/xfs/xfs_parent_utils.c | 126 +++++++++ > fs/xfs/xfs_parent_utils.h | 11 + > fs/xfs/xfs_qm.c | 4 +- > fs/xfs/xfs_qm.h | 2 +- > fs/xfs/xfs_super.c | 14 + > fs/xfs/xfs_symlink.c | 58 ++++- > fs/xfs/xfs_trans.c | 13 +- > fs/xfs/xfs_trans_dquot.c | 15 +- > fs/xfs/xfs_xattr.c | 7 +- > fs/xfs/xfs_xattr.h | 2 + > 45 files changed, 1782 insertions(+), 253 deletions(-) > create mode 100644 fs/xfs/libxfs/xfs_parent.c > create mode 100644 fs/xfs/libxfs/xfs_parent.h > create mode 100644 fs/xfs/xfs_parent_utils.c > create mode 100644 fs/xfs/xfs_parent_utils.h > > -- > 2.25.1 >