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 0e07fb4c176..e5796d1581b 100644 --- a/libxfs/xfs_parent.c +++ b/libxfs/xfs_parent.c @@ -196,6 +196,7 @@ xfs_parent_add( args->trans = tp; args->dp = child; + args->owner = child->i_ino; xfs_init_parent_davalue(&parent->args, parent_name); @@ -228,6 +229,7 @@ xfs_parent_remove( args->trans = tp; args->dp = child; + args->owner = child->i_ino; xfs_init_parent_davalue(&parent->args, parent_name); @@ -266,6 +268,7 @@ xfs_parent_replace( args->trans = tp; args->dp = child; + args->owner = child->i_ino; xfs_init_parent_davalue(&parent->args, old_name); xfs_init_parent_danewvalue(&parent->args, new_name); @@ -328,6 +331,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) { @@ -344,6 +348,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; } /* @@ -360,7 +365,7 @@ xfs_parent_lookup( struct xfs_parent_scratch *scr) { 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); @@ -375,11 +380,12 @@ 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) { 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); return xfs_attr_set(&scr->args); } @@ -393,11 +399,12 @@ 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) { 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_REMOVE; return xfs_attr_set(&scr->args); diff --git a/libxfs/xfs_parent.h b/libxfs/xfs_parent.h index f1ec9cce859..5dbaceb9765 100644 --- a/libxfs/xfs_parent.h +++ b/libxfs/xfs_parent.h @@ -108,11 +108,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);