Commit 568d994e authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Ben Myers

xfs: use xfs_ilock_attr_map_shared in xfs_attr_list_int

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: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarDave Chinner <dchinner@redhat.com>
Signed-off-by: default avatarBen Myers <bpm@sgi.com>
parent 683cb941
...@@ -507,17 +507,17 @@ xfs_attr_list_int( ...@@ -507,17 +507,17 @@ xfs_attr_list_int(
{ {
int error; int error;
xfs_inode_t *dp = context->dp; xfs_inode_t *dp = context->dp;
uint lock_mode;
XFS_STATS_INC(xs_attr_list); XFS_STATS_INC(xs_attr_list);
if (XFS_FORCED_SHUTDOWN(dp->i_mount)) if (XFS_FORCED_SHUTDOWN(dp->i_mount))
return EIO; return EIO;
xfs_ilock(dp, XFS_ILOCK_SHARED);
/* /*
* Decide on what work routines to call based on the inode size. * 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)) { if (!xfs_inode_hasattr(dp)) {
error = 0; error = 0;
} else if (dp->i_d.di_aformat == XFS_DINODE_FMT_LOCAL) { } else if (dp->i_d.di_aformat == XFS_DINODE_FMT_LOCAL) {
...@@ -527,9 +527,7 @@ xfs_attr_list_int( ...@@ -527,9 +527,7 @@ xfs_attr_list_int(
} else { } else {
error = xfs_attr_node_list(context); error = xfs_attr_node_list(context);
} }
xfs_iunlock(dp, lock_mode);
xfs_iunlock(dp, XFS_ILOCK_SHARED);
return error; return error;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment