|
@@ -23,7 +23,8 @@ reiserfs_set_acl(struct inode *inode, struct posix_acl *acl, int type)
|
|
|
struct reiserfs_transaction_handle th;
|
|
|
size_t jcreate_blocks;
|
|
|
int size = acl ? posix_acl_xattr_size(acl->a_count) : 0;
|
|
|
-
|
|
|
+ int update_mode = 0;
|
|
|
+ umode_t mode = inode->i_mode;
|
|
|
|
|
|
/*
|
|
|
* Pessimism: We can't assume that anything from the xattr root up
|
|
@@ -38,12 +39,14 @@ reiserfs_set_acl(struct inode *inode, struct posix_acl *acl, int type)
|
|
|
reiserfs_write_unlock(inode->i_sb);
|
|
|
if (error == 0) {
|
|
|
if (type == ACL_TYPE_ACCESS && acl) {
|
|
|
- error = posix_acl_update_mode(inode, &inode->i_mode,
|
|
|
- &acl);
|
|
|
+ error = posix_acl_update_mode(inode, &mode, &acl);
|
|
|
if (error)
|
|
|
goto unlock;
|
|
|
+ update_mode = 1;
|
|
|
}
|
|
|
error = __reiserfs_set_acl(&th, inode, type, acl);
|
|
|
+ if (!error && update_mode)
|
|
|
+ inode->i_mode = mode;
|
|
|
unlock:
|
|
|
reiserfs_write_lock(inode->i_sb);
|
|
|
error2 = journal_end(&th);
|