Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Aneesh Kumar K.V and committed by
Eric Van Hensbergen
7a4566b0 85ff872d

+47
+41
fs/9p/acl.c
··· 94 94 } 95 95 return -EAGAIN; 96 96 } 97 + 98 + static int v9fs_xattr_get_acl(struct dentry *dentry, const char *name, 99 + void *buffer, size_t size, int type) 100 + { 101 + struct posix_acl *acl; 102 + int error; 103 + 104 + if (strcmp(name, "") != 0) 105 + return -EINVAL; 106 + 107 + acl = v9fs_get_cached_acl(dentry->d_inode, type); 108 + if (IS_ERR(acl)) 109 + return PTR_ERR(acl); 110 + if (acl == NULL) 111 + return -ENODATA; 112 + error = posix_acl_to_xattr(acl, buffer, size); 113 + posix_acl_release(acl); 114 + 115 + return error; 116 + } 117 + 118 + static int v9fs_xattr_set_acl(struct dentry *dentry, const char *name, 119 + const void *value, size_t size, 120 + int flags, int type) 121 + { 122 + return 0; 123 + } 124 + 125 + const struct xattr_handler v9fs_xattr_acl_access_handler = { 126 + .prefix = POSIX_ACL_XATTR_ACCESS, 127 + .flags = ACL_TYPE_ACCESS, 128 + .get = v9fs_xattr_get_acl, 129 + .set = v9fs_xattr_set_acl, 130 + }; 131 + 132 + const struct xattr_handler v9fs_xattr_acl_default_handler = { 133 + .prefix = POSIX_ACL_XATTR_DEFAULT, 134 + .flags = ACL_TYPE_DEFAULT, 135 + .get = v9fs_xattr_get_acl, 136 + .set = v9fs_xattr_set_acl, 137 + };
+4
fs/9p/xattr.c
··· 164 164 165 165 const struct xattr_handler *v9fs_xattr_handlers[] = { 166 166 &v9fs_xattr_user_handler, 167 + #ifdef CONFIG_9P_FS_POSIX_ACL 168 + &v9fs_xattr_acl_access_handler, 169 + &v9fs_xattr_acl_default_handler, 170 + #endif 167 171 NULL 168 172 };
+2
fs/9p/xattr.h
··· 20 20 21 21 extern const struct xattr_handler *v9fs_xattr_handlers[]; 22 22 extern struct xattr_handler v9fs_xattr_user_handler; 23 + extern const struct xattr_handler v9fs_xattr_acl_access_handler; 24 + extern const struct xattr_handler v9fs_xattr_acl_default_handler; 23 25 24 26 extern ssize_t v9fs_fid_xattr_get(struct p9_fid *, const char *, 25 27 void *, size_t);