xfs
[Top] [All Lists]

[PATCH 6/7] xfs: use xfs_ilock_map_shared in xfs_attr_list_int

To: xfs@xxxxxxxxxxx
Subject: [PATCH 6/7] xfs: use xfs_ilock_map_shared in xfs_attr_list_int
From: Christoph Hellwig <hch@xxxxxxxxxxxxx>
Date: Fri, 06 Dec 2013 08:48:25 -0800
Delivered-to: xfs@xxxxxxxxxxx
References: <20131206164819.371654241@xxxxxxxxxxxxxxxxxxxxxx>
User-agent: quilt/0.60-1
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@xxxxxx>

Index: xfs/fs/xfs/xfs_attr_list.c
===================================================================
--- xfs.orig/fs/xfs/xfs_attr_list.c     2013-11-18 14:39:01.947589999 +0100
+++ xfs/fs/xfs/xfs_attr_list.c  2013-12-05 22:25:47.207821971 +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_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_map_shared(dp, lock_mode);
        return error;
 }
 

<Prev in Thread] Current Thread [Next in Thread>