Skip to content

Commit

Permalink
xfs: use xfs_ilock_attr_map_shared in xfs_attr_list_int
Browse files Browse the repository at this point in the history
We might not have read in the extent list at this point, so make sure we
take the ilock exclusively if we have to do so.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Ben Myers <bpm@sgi.com>
  • Loading branch information
Christoph Hellwig authored and Ben Myers committed Dec 18, 2013
1 parent 683cb94 commit 568d994
Showing 1 changed file with 3 additions and 5 deletions.
8 changes: 3 additions & 5 deletions fs/xfs/xfs_attr_list.c
Original file line number Diff line number Diff line change
Expand Up @@ -507,17 +507,17 @@ xfs_attr_list_int(
{
int error;
xfs_inode_t *dp = context->dp;
uint lock_mode;

XFS_STATS_INC(xs_attr_list);

if (XFS_FORCED_SHUTDOWN(dp->i_mount))
return EIO;

xfs_ilock(dp, XFS_ILOCK_SHARED);

/*
* Decide on what work routines to call based on the inode size.
*/
lock_mode = xfs_ilock_attr_map_shared(dp);
if (!xfs_inode_hasattr(dp)) {
error = 0;
} else if (dp->i_d.di_aformat == XFS_DINODE_FMT_LOCAL) {
Expand All @@ -527,9 +527,7 @@ xfs_attr_list_int(
} else {
error = xfs_attr_node_list(context);
}

xfs_iunlock(dp, XFS_ILOCK_SHARED);

xfs_iunlock(dp, lock_mode);
return error;
}

Expand Down

0 comments on commit 568d994

Please sign in to comment.