xfs: optimize the negative xattr caching
Christoph Hellwig [Tue, 26 Jul 2011 15:07:29 +0000 (15:07 +0000)]
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;
        }
 
-       /* 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);
+       }
 
        xfs_iflags_clear(ip, XFS_INEW);
        barrier();