diff options
author | Andreas Gruenbacher <agruenba@redhat.com> | 2015-10-04 19:18:51 +0200 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2015-11-14 02:34:32 +0100 |
commit | d9a82a04033f87bbd06efb29f78c0170a38154a8 (patch) | |
tree | ac074d813cda2a29a5f8a12a063e058ea588cb7c /fs/9p/acl.c | |
parent | jffs2: Add missing capability check for listing trusted xattrs (diff) | |
download | linux-d9a82a04033f87bbd06efb29f78c0170a38154a8.tar.xz linux-d9a82a04033f87bbd06efb29f78c0170a38154a8.zip |
xattr handlers: Pass handler to operations instead of flags
The xattr_handler operations are currently all passed a file system
specific flags value which the operations can use to disambiguate between
different handlers; some file systems use that to distinguish the xattr
namespace, for example. In some oprations, it would be useful to also have
access to the handler prefix. To allow that, pass a pointer to the handler
to operations instead of the flags value alone.
Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/9p/acl.c')
-rw-r--r-- | fs/9p/acl.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/fs/9p/acl.c b/fs/9p/acl.c index 31c010372660..e6fe82462043 100644 --- a/fs/9p/acl.c +++ b/fs/9p/acl.c @@ -230,11 +230,13 @@ static int v9fs_remote_get_acl(struct dentry *dentry, const char *name, return v9fs_xattr_get(dentry, full_name, buffer, size); } -static int v9fs_xattr_get_acl(struct dentry *dentry, const char *name, - void *buffer, size_t size, int type) +static int v9fs_xattr_get_acl(const struct xattr_handler *handler, + struct dentry *dentry, const char *name, + void *buffer, size_t size) { struct v9fs_session_info *v9ses; struct posix_acl *acl; + int type = handler->flags; int error; if (strcmp(name, "") != 0) @@ -278,9 +280,9 @@ static int v9fs_remote_set_acl(struct dentry *dentry, const char *name, } -static int v9fs_xattr_set_acl(struct dentry *dentry, const char *name, - const void *value, size_t size, - int flags, int type) +static int v9fs_xattr_set_acl(const struct xattr_handler *handler, + struct dentry *dentry, const char *name, + const void *value, size_t size, int flags) { int retval; struct posix_acl *acl; @@ -297,7 +299,7 @@ static int v9fs_xattr_set_acl(struct dentry *dentry, const char *name, */ if ((v9ses->flags & V9FS_ACCESS_MASK) != V9FS_ACCESS_CLIENT) return v9fs_remote_set_acl(dentry, name, - value, size, flags, type); + value, size, flags, handler->flags); if (S_ISLNK(inode->i_mode)) return -EOPNOTSUPP; @@ -316,7 +318,7 @@ static int v9fs_xattr_set_acl(struct dentry *dentry, const char *name, } else acl = NULL; - switch (type) { + switch (handler->flags) { case ACL_TYPE_ACCESS: name = POSIX_ACL_XATTR_ACCESS; if (acl) { @@ -360,7 +362,7 @@ static int v9fs_xattr_set_acl(struct dentry *dentry, const char *name, } retval = v9fs_xattr_set(dentry, name, value, size, flags); if (!retval) - set_cached_acl(inode, type, acl); + set_cached_acl(inode, handler->flags, acl); err_out: posix_acl_release(acl); return retval; |