kill boilerplate around posix_acl_chmod_masq()
new helper: posix_acl_chmod(&acl, gfp, mode). Replaces acl with modified clone or with NULL if that has failed; returns 0 or -ve on error. All callers of posix_acl_chmod_masq() switched to that - they'd been doing exactly the same thing. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
このコミットが含まれているのは:
@@ -445,7 +445,10 @@ int reiserfs_cache_default_acl(struct inode *inode)
|
||||
|
||||
int reiserfs_acl_chmod(struct inode *inode)
|
||||
{
|
||||
struct posix_acl *acl, *clone;
|
||||
struct reiserfs_transaction_handle th;
|
||||
struct posix_acl *acl;
|
||||
size_t size;
|
||||
int depth;
|
||||
int error;
|
||||
|
||||
if (S_ISLNK(inode->i_mode))
|
||||
@@ -463,30 +466,22 @@ int reiserfs_acl_chmod(struct inode *inode)
|
||||
return 0;
|
||||
if (IS_ERR(acl))
|
||||
return PTR_ERR(acl);
|
||||
clone = posix_acl_clone(acl, GFP_NOFS);
|
||||
posix_acl_release(acl);
|
||||
if (!clone)
|
||||
return -ENOMEM;
|
||||
error = posix_acl_chmod_masq(clone, inode->i_mode);
|
||||
if (!error) {
|
||||
struct reiserfs_transaction_handle th;
|
||||
size_t size = reiserfs_xattr_nblocks(inode,
|
||||
reiserfs_acl_size(clone->a_count));
|
||||
int depth;
|
||||
error = posix_acl_chmod(&acl, GFP_NOFS, inode->i_mode);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
depth = reiserfs_write_lock_once(inode->i_sb);
|
||||
error = journal_begin(&th, inode->i_sb, size * 2);
|
||||
if (!error) {
|
||||
int error2;
|
||||
error = reiserfs_set_acl(&th, inode, ACL_TYPE_ACCESS,
|
||||
clone);
|
||||
error2 = journal_end(&th, inode->i_sb, size * 2);
|
||||
if (error2)
|
||||
error = error2;
|
||||
}
|
||||
reiserfs_write_unlock_once(inode->i_sb, depth);
|
||||
size = reiserfs_xattr_nblocks(inode, reiserfs_acl_size(acl->a_count));
|
||||
depth = reiserfs_write_lock_once(inode->i_sb);
|
||||
error = journal_begin(&th, inode->i_sb, size * 2);
|
||||
if (!error) {
|
||||
int error2;
|
||||
error = reiserfs_set_acl(&th, inode, ACL_TYPE_ACCESS, acl);
|
||||
error2 = journal_end(&th, inode->i_sb, size * 2);
|
||||
if (error2)
|
||||
error = error2;
|
||||
}
|
||||
posix_acl_release(clone);
|
||||
reiserfs_write_unlock_once(inode->i_sb, depth);
|
||||
posix_acl_release(acl);
|
||||
return error;
|
||||
}
|
||||
|
||||
|
新しいイシューから参照
ユーザーをブロックする