From: Steven Whitehouse <swhiteho@redhat.com>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] [PATCH 6/7] GFS2: Add cached ACLs support
Date: Tue, 29 Sep 2009 16:48:29 +0100 [thread overview]
Message-ID: <1254239310-1963-7-git-send-email-swhiteho@redhat.com> (raw)
In-Reply-To: <1254239310-1963-6-git-send-email-swhiteho@redhat.com>
The other patches in this series have been building towards
being able to support cached ACLs like other filesystems. The
only real difference with GFS2 is that we have to invalidate
the cache when we drop a glock, but that is dealt with in earlier
patches.
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
---
fs/gfs2/acl.c | 27 +++++++++++++++++++++++++--
1 files changed, 25 insertions(+), 2 deletions(-)
diff --git a/fs/gfs2/acl.c b/fs/gfs2/acl.c
index c015746..486fd32 100644
--- a/fs/gfs2/acl.c
+++ b/fs/gfs2/acl.c
@@ -48,6 +48,10 @@ static struct posix_acl *gfs2_acl_get(struct gfs2_inode *ip, int type)
if (!ip->i_eattr)
return NULL;
+ acl = get_cached_acl(&ip->i_inode, type);
+ if (acl != ACL_NOT_CACHED)
+ return acl;
+
name = gfs2_acl_name(type);
if (name == NULL)
return ERR_PTR(-EINVAL);
@@ -123,6 +127,8 @@ static int gfs2_acl_set(struct inode *inode, int type, struct posix_acl *acl)
if (error)
goto out;
error = gfs2_xattr_set(inode, GFS2_EATYPE_SYS, name, data, len, 0);
+ if (!error)
+ set_cached_acl(inode, type, acl);
out:
kfree(data);
return error;
@@ -209,6 +215,7 @@ int gfs2_acl_chmod(struct gfs2_inode *ip, struct iattr *attr)
posix_acl_to_xattr(acl, data, len);
error = gfs2_xattr_acl_chmod(ip, attr, data);
kfree(data);
+ set_cached_acl(&ip->i_inode, ACL_TYPE_ACCESS, acl);
}
out:
@@ -228,15 +235,25 @@ static int gfs2_acl_type(const char *name)
static int gfs2_xattr_system_get(struct inode *inode, const char *name,
void *buffer, size_t size)
{
+ struct posix_acl *acl;
int type;
+ int error;
type = gfs2_acl_type(name);
if (type < 0)
return type;
- return gfs2_xattr_get(inode, GFS2_EATYPE_SYS, name, buffer, size);
-}
+ acl = gfs2_acl_get(GFS2_I(inode), type);
+ if (IS_ERR(acl))
+ return PTR_ERR(acl);
+ if (acl == NULL)
+ return -ENODATA;
+ error = posix_acl_to_xattr(acl, buffer, size);
+ posix_acl_release(acl);
+
+ return error;
+}
static int gfs2_xattr_system_set(struct inode *inode, const char *name,
const void *value, size_t size, int flags)
@@ -299,6 +316,12 @@ static int gfs2_xattr_system_set(struct inode *inode, const char *name,
set_acl:
error = gfs2_xattr_set(inode, GFS2_EATYPE_SYS, name, value, size, 0);
+ if (!error) {
+ if (acl)
+ set_cached_acl(inode, type, acl);
+ else
+ forget_cached_acl(inode, type);
+ }
out_release:
posix_acl_release(acl);
out:
--
1.6.2.5
next prev parent reply other threads:[~2009-09-29 15:48 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-09-29 15:48 [Cluster-devel] GFS2 ACL caching patches Steven Whitehouse
2009-09-29 15:48 ` [Cluster-devel] [PATCH 1/7] GFS2: Fix up system xattrs Steven Whitehouse
2009-09-29 15:48 ` [Cluster-devel] [PATCH 2/7] VFS: Add forget_all_cached_acls() Steven Whitehouse
2009-09-29 15:48 ` [Cluster-devel] [PATCH 3/7] GFS2: Use forget_all_cached_acls() Steven Whitehouse
2009-09-29 15:48 ` [Cluster-devel] [PATCH 4/7] GFS2: Use gfs2_set_mode() instead of munge_mode() Steven Whitehouse
2009-09-29 15:48 ` [Cluster-devel] [PATCH 5/7] GFS2: Clean up ACLs Steven Whitehouse
2009-09-29 15:48 ` Steven Whitehouse [this message]
2009-09-29 15:48 ` [Cluster-devel] [PATCH 7/7] VFS: Use GFP_NOFS in posix_acl_from_xattr() Steven Whitehouse
-- strict thread matches above, loose matches on Subject: below --
2009-10-02 11:35 [Cluster-devel] GFS2: ACL/xattr update patch set Steven Whitehouse
2009-10-02 11:35 ` [Cluster-devel] [PATCH 1/7] GFS2: Fix up system xattrs Steven Whitehouse
2009-10-02 11:35 ` [Cluster-devel] [PATCH 2/7] VFS: Add forget_all_cached_acls() Steven Whitehouse
2009-10-02 11:35 ` [Cluster-devel] [PATCH 3/7] GFS2: Use forget_all_cached_acls() Steven Whitehouse
2009-10-02 11:35 ` [Cluster-devel] [PATCH 4/7] GFS2: Use gfs2_set_mode() instead of munge_mode() Steven Whitehouse
2009-10-02 11:35 ` [Cluster-devel] [PATCH 5/7] GFS2: Clean up ACLs Steven Whitehouse
2009-10-02 11:35 ` [Cluster-devel] [PATCH 6/7] GFS2: Add cached ACLs support Steven Whitehouse
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1254239310-1963-7-git-send-email-swhiteho@redhat.com \
--to=swhiteho@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).