|
@@ -240,18 +240,6 @@ int ocfs2_set_acl(handle_t *handle,
|
|
|
switch (type) {
|
|
|
case ACL_TYPE_ACCESS:
|
|
|
name_index = OCFS2_XATTR_INDEX_POSIX_ACL_ACCESS;
|
|
|
- if (acl) {
|
|
|
- umode_t mode;
|
|
|
-
|
|
|
- ret = posix_acl_update_mode(inode, &mode, &acl);
|
|
|
- if (ret)
|
|
|
- return ret;
|
|
|
-
|
|
|
- ret = ocfs2_acl_set_mode(inode, di_bh,
|
|
|
- handle, mode);
|
|
|
- if (ret)
|
|
|
- return ret;
|
|
|
- }
|
|
|
break;
|
|
|
case ACL_TYPE_DEFAULT:
|
|
|
name_index = OCFS2_XATTR_INDEX_POSIX_ACL_DEFAULT;
|
|
@@ -289,7 +277,19 @@ int ocfs2_iop_set_acl(struct inode *inode, struct posix_acl *acl, int type)
|
|
|
had_lock = ocfs2_inode_lock_tracker(inode, &bh, 1, &oh);
|
|
|
if (had_lock < 0)
|
|
|
return had_lock;
|
|
|
+ if (type == ACL_TYPE_ACCESS && acl) {
|
|
|
+ umode_t mode;
|
|
|
+
|
|
|
+ status = posix_acl_update_mode(inode, &mode, &acl);
|
|
|
+ if (status)
|
|
|
+ goto unlock;
|
|
|
+
|
|
|
+ status = ocfs2_acl_set_mode(inode, bh, NULL, mode);
|
|
|
+ if (status)
|
|
|
+ goto unlock;
|
|
|
+ }
|
|
|
status = ocfs2_set_acl(NULL, inode, bh, type, acl, NULL, NULL);
|
|
|
+unlock:
|
|
|
ocfs2_inode_unlock_tracker(inode, 1, &oh, had_lock);
|
|
|
brelse(bh);
|
|
|
return status;
|