From: Darrick J. Wong <djwong@xxxxxxxxxx> Now that struct xfs_da_args has an explicit file owner field, we must set it when modifying parent pointers. Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx> --- libxfs/xfs_parent.c | 13 ++++++++++--- libxfs/xfs_parent.h | 4 ++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/libxfs/xfs_parent.c b/libxfs/xfs_parent.c index f7cef51e1ec..8f4196c20f1 100644 --- a/libxfs/xfs_parent.c +++ b/libxfs/xfs_parent.c @@ -202,6 +202,7 @@ xfs_parent_addname( args->trans = tp; args->dp = child; + args->owner = child->i_ino; xfs_init_parent_davalue(&ppargs->args, parent_name); @@ -240,6 +241,7 @@ xfs_parent_removename( args->trans = tp; args->dp = child; + args->owner = child->i_ino; xfs_init_parent_davalue(&ppargs->args, parent_name); @@ -289,6 +291,7 @@ xfs_parent_replacename( args->trans = tp; args->dp = child; + args->owner = child->i_ino; xfs_init_parent_davalue(&ppargs->args, old_name); xfs_init_parent_danewvalue(&ppargs->args, new_name); @@ -372,6 +375,7 @@ static inline void xfs_parent_scratch_init( struct xfs_trans *tp, struct xfs_inode *ip, + xfs_ino_t owner, const struct xfs_parent_name_irec *pptr, struct xfs_parent_scratch *scr) { @@ -388,6 +392,7 @@ xfs_parent_scratch_init( scr->args.whichfork = XFS_ATTR_FORK; scr->args.hashval = xfs_da_hashname((const void *)&scr->rec, sizeof(struct xfs_parent_name_rec)); + scr->args.owner = owner; } /* @@ -416,7 +421,7 @@ xfs_parent_lookup( } xfs_parent_irec_to_disk(&scr->rec, pptr); - xfs_parent_scratch_init(tp, ip, pptr, scr); + xfs_parent_scratch_init(tp, ip, ip->i_ino, pptr, scr); scr->args.op_flags |= XFS_DA_OP_OKNOENT; return xfs_attr_get_ilocked(&scr->args); @@ -430,6 +435,7 @@ xfs_parent_lookup( int xfs_parent_set( struct xfs_inode *ip, + xfs_ino_t owner, const struct xfs_parent_name_irec *pptr, struct xfs_parent_scratch *scr) { @@ -439,7 +445,7 @@ xfs_parent_set( } xfs_parent_irec_to_disk(&scr->rec, pptr); - xfs_parent_scratch_init(NULL, ip, pptr, scr); + xfs_parent_scratch_init(NULL, ip, owner, pptr, scr); scr->args.op_flags |= XFS_DA_OP_LOGGED; return xfs_attr_set(&scr->args); @@ -453,6 +459,7 @@ xfs_parent_set( int xfs_parent_unset( struct xfs_inode *ip, + xfs_ino_t owner, const struct xfs_parent_name_irec *pptr, struct xfs_parent_scratch *scr) { @@ -462,7 +469,7 @@ xfs_parent_unset( } xfs_parent_irec_to_disk(&scr->rec, pptr); - xfs_parent_scratch_init(NULL, ip, pptr, scr); + xfs_parent_scratch_init(NULL, ip, owner, pptr, scr); scr->args.op_flags |= XFS_DA_OP_LOGGED | XFS_DA_OP_REMOVE; return xfs_attr_set(&scr->args); diff --git a/libxfs/xfs_parent.h b/libxfs/xfs_parent.h index 58e59af818b..46bf96c7e3c 100644 --- a/libxfs/xfs_parent.h +++ b/libxfs/xfs_parent.h @@ -162,11 +162,11 @@ int xfs_parent_lookup(struct xfs_trans *tp, struct xfs_inode *ip, const struct xfs_parent_name_irec *pptr, struct xfs_parent_scratch *scratch); -int xfs_parent_set(struct xfs_inode *ip, +int xfs_parent_set(struct xfs_inode *ip, xfs_ino_t owner, const struct xfs_parent_name_irec *pptr, struct xfs_parent_scratch *scratch); -int xfs_parent_unset(struct xfs_inode *ip, +int xfs_parent_unset(struct xfs_inode *ip, xfs_ino_t owner, const struct xfs_parent_name_irec *rec, struct xfs_parent_scratch *scratch);