jfs: fix generic posix ACL regression
I missed a couple errors in reviewing the patches converting jfs to use the generic posix ACL function. Setting ACL's currently fails with -EOPNOTSUPP. Signed-off-by: Dave Kleikamp <dave.kleikamp@oracle.com> Reported-by: Michael L. Semon <mlsemon35@gmail.com> Reviewed-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
41f76d8bee
commit
c18f7b5120
|
@ -854,9 +854,6 @@ int jfs_setxattr(struct dentry *dentry, const char *name, const void *value,
|
||||||
int rc;
|
int rc;
|
||||||
tid_t tid;
|
tid_t tid;
|
||||||
|
|
||||||
if ((rc = can_set_xattr(inode, name, value, value_len)))
|
|
||||||
return rc;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If this is a request for a synthetic attribute in the system.*
|
* If this is a request for a synthetic attribute in the system.*
|
||||||
* namespace use the generic infrastructure to resolve a handler
|
* namespace use the generic infrastructure to resolve a handler
|
||||||
|
@ -865,6 +862,9 @@ int jfs_setxattr(struct dentry *dentry, const char *name, const void *value,
|
||||||
if (!strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN))
|
if (!strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN))
|
||||||
return generic_setxattr(dentry, name, value, value_len, flags);
|
return generic_setxattr(dentry, name, value, value_len, flags);
|
||||||
|
|
||||||
|
if ((rc = can_set_xattr(inode, name, value, value_len)))
|
||||||
|
return rc;
|
||||||
|
|
||||||
if (value == NULL) { /* empty EA, do not remove */
|
if (value == NULL) { /* empty EA, do not remove */
|
||||||
value = "";
|
value = "";
|
||||||
value_len = 0;
|
value_len = 0;
|
||||||
|
@ -1034,9 +1034,6 @@ int jfs_removexattr(struct dentry *dentry, const char *name)
|
||||||
int rc;
|
int rc;
|
||||||
tid_t tid;
|
tid_t tid;
|
||||||
|
|
||||||
if ((rc = can_set_xattr(inode, name, NULL, 0)))
|
|
||||||
return rc;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If this is a request for a synthetic attribute in the system.*
|
* If this is a request for a synthetic attribute in the system.*
|
||||||
* namespace use the generic infrastructure to resolve a handler
|
* namespace use the generic infrastructure to resolve a handler
|
||||||
|
@ -1045,6 +1042,9 @@ int jfs_removexattr(struct dentry *dentry, const char *name)
|
||||||
if (!strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN))
|
if (!strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN))
|
||||||
return generic_removexattr(dentry, name);
|
return generic_removexattr(dentry, name);
|
||||||
|
|
||||||
|
if ((rc = can_set_xattr(inode, name, NULL, 0)))
|
||||||
|
return rc;
|
||||||
|
|
||||||
tid = txBegin(inode->i_sb, 0);
|
tid = txBegin(inode->i_sb, 0);
|
||||||
mutex_lock(&ji->commit_mutex);
|
mutex_lock(&ji->commit_mutex);
|
||||||
rc = __jfs_setxattr(tid, dentry->d_inode, name, NULL, 0, XATTR_REPLACE);
|
rc = __jfs_setxattr(tid, dentry->d_inode, name, NULL, 0, XATTR_REPLACE);
|
||||||
|
@ -1061,7 +1061,7 @@ int jfs_removexattr(struct dentry *dentry, const char *name)
|
||||||
* attributes are handled directly.
|
* attributes are handled directly.
|
||||||
*/
|
*/
|
||||||
const struct xattr_handler *jfs_xattr_handlers[] = {
|
const struct xattr_handler *jfs_xattr_handlers[] = {
|
||||||
#ifdef JFS_POSIX_ACL
|
#ifdef CONFIG_JFS_POSIX_ACL
|
||||||
&posix_acl_access_xattr_handler,
|
&posix_acl_access_xattr_handler,
|
||||||
&posix_acl_default_xattr_handler,
|
&posix_acl_default_xattr_handler,
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue