VFS: Add forget_all_cached_acls()
authorSteven Whitehouse <swhiteho@redhat.com>
Tue, 29 Sep 2009 11:27:23 +0000 (12:27 +0100)
committerSteven Whitehouse <swhiteho@redhat.com>
Thu, 3 Dec 2009 11:43:23 +0000 (11:43 +0000)
This is required for cluster filesystems which want to use
cached ACLs so that they can invalidate the cache when
required.

Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Cc: Alexander Viro <aviro@redhat.com>
Cc: Christoph Hellwig <hch@infradead.org>
include/linux/posix_acl.h

index 065a365..6760816 100644 (file)
@@ -147,6 +147,20 @@ static inline void forget_cached_acl(struct inode *inode, int type)
        if (old != ACL_NOT_CACHED)
                posix_acl_release(old);
 }
+
+static inline void forget_all_cached_acls(struct inode *inode)
+{
+       struct posix_acl *old_access, *old_default;
+       spin_lock(&inode->i_lock);
+       old_access = inode->i_acl;
+       old_default = inode->i_default_acl;
+       inode->i_acl = inode->i_default_acl = ACL_NOT_CACHED;
+       spin_unlock(&inode->i_lock);
+       if (old_access != ACL_NOT_CACHED)
+               posix_acl_release(old_access);
+       if (old_default != ACL_NOT_CACHED)
+               posix_acl_release(old_default);
+}
 #endif
 
 static inline void cache_no_acl(struct inode *inode)