|
@@ -212,31 +212,12 @@ int v9fs_acl_mode(struct inode *dir, umode_t *modep,
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
-static int v9fs_remote_get_acl(struct dentry *dentry, const char *name,
|
|
|
|
- void *buffer, size_t size, int type)
|
|
|
|
-{
|
|
|
|
- char *full_name;
|
|
|
|
-
|
|
|
|
- switch (type) {
|
|
|
|
- case ACL_TYPE_ACCESS:
|
|
|
|
- full_name = POSIX_ACL_XATTR_ACCESS;
|
|
|
|
- break;
|
|
|
|
- case ACL_TYPE_DEFAULT:
|
|
|
|
- full_name = POSIX_ACL_XATTR_DEFAULT;
|
|
|
|
- break;
|
|
|
|
- default:
|
|
|
|
- BUG();
|
|
|
|
- }
|
|
|
|
- return v9fs_xattr_get(dentry, full_name, buffer, size);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
static int v9fs_xattr_get_acl(const struct xattr_handler *handler,
|
|
static int v9fs_xattr_get_acl(const struct xattr_handler *handler,
|
|
struct dentry *dentry, const char *name,
|
|
struct dentry *dentry, const char *name,
|
|
void *buffer, size_t size)
|
|
void *buffer, size_t size)
|
|
{
|
|
{
|
|
struct v9fs_session_info *v9ses;
|
|
struct v9fs_session_info *v9ses;
|
|
struct posix_acl *acl;
|
|
struct posix_acl *acl;
|
|
- int type = handler->flags;
|
|
|
|
int error;
|
|
int error;
|
|
|
|
|
|
if (strcmp(name, "") != 0)
|
|
if (strcmp(name, "") != 0)
|
|
@@ -247,9 +228,9 @@ static int v9fs_xattr_get_acl(const struct xattr_handler *handler,
|
|
* We allow set/get/list of acl when access=client is not specified
|
|
* We allow set/get/list of acl when access=client is not specified
|
|
*/
|
|
*/
|
|
if ((v9ses->flags & V9FS_ACCESS_MASK) != V9FS_ACCESS_CLIENT)
|
|
if ((v9ses->flags & V9FS_ACCESS_MASK) != V9FS_ACCESS_CLIENT)
|
|
- return v9fs_remote_get_acl(dentry, name, buffer, size, type);
|
|
|
|
|
|
+ return v9fs_xattr_get(dentry, handler->prefix, buffer, size);
|
|
|
|
|
|
- acl = v9fs_get_cached_acl(d_inode(dentry), type);
|
|
|
|
|
|
+ acl = v9fs_get_cached_acl(d_inode(dentry), handler->flags);
|
|
if (IS_ERR(acl))
|
|
if (IS_ERR(acl))
|
|
return PTR_ERR(acl);
|
|
return PTR_ERR(acl);
|
|
if (acl == NULL)
|
|
if (acl == NULL)
|
|
@@ -260,26 +241,6 @@ static int v9fs_xattr_get_acl(const struct xattr_handler *handler,
|
|
return error;
|
|
return error;
|
|
}
|
|
}
|
|
|
|
|
|
-static int v9fs_remote_set_acl(struct dentry *dentry, const char *name,
|
|
|
|
- const void *value, size_t size,
|
|
|
|
- int flags, int type)
|
|
|
|
-{
|
|
|
|
- char *full_name;
|
|
|
|
-
|
|
|
|
- switch (type) {
|
|
|
|
- case ACL_TYPE_ACCESS:
|
|
|
|
- full_name = POSIX_ACL_XATTR_ACCESS;
|
|
|
|
- break;
|
|
|
|
- case ACL_TYPE_DEFAULT:
|
|
|
|
- full_name = POSIX_ACL_XATTR_DEFAULT;
|
|
|
|
- break;
|
|
|
|
- default:
|
|
|
|
- BUG();
|
|
|
|
- }
|
|
|
|
- return v9fs_xattr_set(dentry, full_name, value, size, flags);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-
|
|
|
|
static int v9fs_xattr_set_acl(const struct xattr_handler *handler,
|
|
static int v9fs_xattr_set_acl(const struct xattr_handler *handler,
|
|
struct dentry *dentry, const char *name,
|
|
struct dentry *dentry, const char *name,
|
|
const void *value, size_t size, int flags)
|
|
const void *value, size_t size, int flags)
|
|
@@ -298,8 +259,8 @@ static int v9fs_xattr_set_acl(const struct xattr_handler *handler,
|
|
* xattr value. We leave it to the server to validate
|
|
* xattr value. We leave it to the server to validate
|
|
*/
|
|
*/
|
|
if ((v9ses->flags & V9FS_ACCESS_MASK) != V9FS_ACCESS_CLIENT)
|
|
if ((v9ses->flags & V9FS_ACCESS_MASK) != V9FS_ACCESS_CLIENT)
|
|
- return v9fs_remote_set_acl(dentry, name,
|
|
|
|
- value, size, flags, handler->flags);
|
|
|
|
|
|
+ return v9fs_xattr_set(dentry, handler->prefix, value, size,
|
|
|
|
+ flags);
|
|
|
|
|
|
if (S_ISLNK(inode->i_mode))
|
|
if (S_ISLNK(inode->i_mode))
|
|
return -EOPNOTSUPP;
|
|
return -EOPNOTSUPP;
|
|
@@ -320,7 +281,6 @@ static int v9fs_xattr_set_acl(const struct xattr_handler *handler,
|
|
|
|
|
|
switch (handler->flags) {
|
|
switch (handler->flags) {
|
|
case ACL_TYPE_ACCESS:
|
|
case ACL_TYPE_ACCESS:
|
|
- name = POSIX_ACL_XATTR_ACCESS;
|
|
|
|
if (acl) {
|
|
if (acl) {
|
|
umode_t mode = inode->i_mode;
|
|
umode_t mode = inode->i_mode;
|
|
retval = posix_acl_equiv_mode(acl, &mode);
|
|
retval = posix_acl_equiv_mode(acl, &mode);
|
|
@@ -351,7 +311,6 @@ static int v9fs_xattr_set_acl(const struct xattr_handler *handler,
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
case ACL_TYPE_DEFAULT:
|
|
case ACL_TYPE_DEFAULT:
|
|
- name = POSIX_ACL_XATTR_DEFAULT;
|
|
|
|
if (!S_ISDIR(inode->i_mode)) {
|
|
if (!S_ISDIR(inode->i_mode)) {
|
|
retval = acl ? -EINVAL : 0;
|
|
retval = acl ? -EINVAL : 0;
|
|
goto err_out;
|
|
goto err_out;
|
|
@@ -360,7 +319,7 @@ static int v9fs_xattr_set_acl(const struct xattr_handler *handler,
|
|
default:
|
|
default:
|
|
BUG();
|
|
BUG();
|
|
}
|
|
}
|
|
- retval = v9fs_xattr_set(dentry, name, value, size, flags);
|
|
|
|
|
|
+ retval = v9fs_xattr_set(dentry, handler->prefix, value, size, flags);
|
|
if (!retval)
|
|
if (!retval)
|
|
set_cached_acl(inode, handler->flags, acl);
|
|
set_cached_acl(inode, handler->flags, acl);
|
|
err_out:
|
|
err_out:
|