xfs: optimize the negative xattr caching
authorChristoph Hellwig <hch@infradead.org>
Tue, 26 Jul 2011 15:07:29 +0000 (15:07 +0000)
committerAlex Elder <aelder@sgi.com>
Wed, 27 Jul 2011 03:06:50 +0000 (22:06 -0500)
Since the addition of file capabilities every write needs to read xattrs to
check if we have any capabilities to clear.  In Linux 3.0 Andi Kleen added
a flag to cache the fact that we do not have any attributes on an inode.
Make sure to already mark a file as not having any attributes when reading
it from disk in case it doesn't even have an attribute fork.  Based on an
earlier patch from Andi Kleen.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Alex Elder <aelder@sgi.com>
fs/xfs/linux-2.6/xfs_iops.c

index 6544c32..b9c172b 100644 (file)
@@ -1194,9 +1194,14 @@ xfs_setup_inode(
                break;
        }
 
                break;
        }
 
-       /* if there is no attribute fork no ACL can exist on this inode */
-       if (!XFS_IFORK_Q(ip))
+       /*
+        * If there is no attribute fork no ACL can exist on this inode,
+        * and it can't have any file capabilities attached to it either.
+        */
+       if (!XFS_IFORK_Q(ip)) {
+               inode_has_no_xattr(inode);
                cache_no_acl(inode);
                cache_no_acl(inode);
+       }
 
        xfs_iflags_clear(ip, XFS_INEW);
        barrier();
 
        xfs_iflags_clear(ip, XFS_INEW);
        barrier();