|
@@ -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) {
|
|
@@ -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;
|
|
|
}
|
|
|
|