Re: [PATCH 10/11] xfs: use xfs_ilock_attr_map_shared in xfs_attr_list_int

Dave Chinner
2013-12-08T22:39:33Z

On Fri, Dec 06, 2013 at 12:30:16PM -0800, Christoph Hellwig wrote:
> 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>
>
> Index: xfs/fs/xfs/xfs_attr_list.c
> ===================================================================
> --- xfs.orig/fs/xfs/xfs_attr_list.c 2013-12-06 17:20:27.371331603 +0100
> +++ xfs/fs/xfs/xfs_attr_list.c 2013-12-06 19:41:42.779157674 +0100
> @@ -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;
> }

Looks good.

Reviewed-by: Dave Chinner <dchinner@redhat.com>

--
Dave Chinner
david@fromorbit.com