fs/9p: Add xattr callbacks for POSIX ACL
This patch implement fetching POSIX ACL from the server Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> Signed-off-by: Venkateswararao Jujjuri <jvrao@linux.vnet.ibm.com> Signed-off-by: Eric Van Hensbergen <ericvh@gmail.com>
This commit is contained in:
parent
85ff872d3f
commit
7a4566b0b8
3 changed files with 47 additions and 0 deletions
41
fs/9p/acl.c
41
fs/9p/acl.c
|
@ -94,3 +94,44 @@ int v9fs_check_acl(struct inode *inode, int mask)
|
||||||
}
|
}
|
||||||
return -EAGAIN;
|
return -EAGAIN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int v9fs_xattr_get_acl(struct dentry *dentry, const char *name,
|
||||||
|
void *buffer, size_t size, int type)
|
||||||
|
{
|
||||||
|
struct posix_acl *acl;
|
||||||
|
int error;
|
||||||
|
|
||||||
|
if (strcmp(name, "") != 0)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
acl = v9fs_get_cached_acl(dentry->d_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 v9fs_xattr_set_acl(struct dentry *dentry, const char *name,
|
||||||
|
const void *value, size_t size,
|
||||||
|
int flags, int type)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
const struct xattr_handler v9fs_xattr_acl_access_handler = {
|
||||||
|
.prefix = POSIX_ACL_XATTR_ACCESS,
|
||||||
|
.flags = ACL_TYPE_ACCESS,
|
||||||
|
.get = v9fs_xattr_get_acl,
|
||||||
|
.set = v9fs_xattr_set_acl,
|
||||||
|
};
|
||||||
|
|
||||||
|
const struct xattr_handler v9fs_xattr_acl_default_handler = {
|
||||||
|
.prefix = POSIX_ACL_XATTR_DEFAULT,
|
||||||
|
.flags = ACL_TYPE_DEFAULT,
|
||||||
|
.get = v9fs_xattr_get_acl,
|
||||||
|
.set = v9fs_xattr_set_acl,
|
||||||
|
};
|
||||||
|
|
|
@ -164,5 +164,9 @@ ssize_t v9fs_listxattr(struct dentry *dentry, char *buffer, size_t buffer_size)
|
||||||
|
|
||||||
const struct xattr_handler *v9fs_xattr_handlers[] = {
|
const struct xattr_handler *v9fs_xattr_handlers[] = {
|
||||||
&v9fs_xattr_user_handler,
|
&v9fs_xattr_user_handler,
|
||||||
|
#ifdef CONFIG_9P_FS_POSIX_ACL
|
||||||
|
&v9fs_xattr_acl_access_handler,
|
||||||
|
&v9fs_xattr_acl_default_handler,
|
||||||
|
#endif
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
|
@ -20,6 +20,8 @@
|
||||||
|
|
||||||
extern const struct xattr_handler *v9fs_xattr_handlers[];
|
extern const struct xattr_handler *v9fs_xattr_handlers[];
|
||||||
extern struct xattr_handler v9fs_xattr_user_handler;
|
extern struct xattr_handler v9fs_xattr_user_handler;
|
||||||
|
extern const struct xattr_handler v9fs_xattr_acl_access_handler;
|
||||||
|
extern const struct xattr_handler v9fs_xattr_acl_default_handler;
|
||||||
|
|
||||||
extern ssize_t v9fs_fid_xattr_get(struct p9_fid *, const char *,
|
extern ssize_t v9fs_fid_xattr_get(struct p9_fid *, const char *,
|
||||||
void *, size_t);
|
void *, size_t);
|
||||||
|
|
Loading…
Reference in a new issue