reiserfs: Don't clear SGID when inheriting ACLs
[sfrench/cifs-2.6.git] / fs / reiserfs / xattr_acl.c
index 3d2256a425ee7a71e97603778e0eab428db84be4..d92a1dc6ee70f66ea8f95838598a859365e5cf64 100644 (file)
@@ -37,7 +37,14 @@ reiserfs_set_acl(struct inode *inode, struct posix_acl *acl, int type)
        error = journal_begin(&th, inode->i_sb, jcreate_blocks);
        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);
+                       if (error)
+                               goto unlock;
+               }
                error = __reiserfs_set_acl(&th, inode, type, acl);
+unlock:
                reiserfs_write_lock(inode->i_sb);
                error2 = journal_end(&th);
                reiserfs_write_unlock(inode->i_sb);
@@ -241,11 +248,6 @@ __reiserfs_set_acl(struct reiserfs_transaction_handle *th, struct inode *inode,
        switch (type) {
        case ACL_TYPE_ACCESS:
                name = XATTR_NAME_POSIX_ACL_ACCESS;
-               if (acl) {
-                       error = posix_acl_update_mode(inode, &inode->i_mode, &acl);
-                       if (error)
-                               return error;
-               }
                break;
        case ACL_TYPE_DEFAULT:
                name = XATTR_NAME_POSIX_ACL_DEFAULT;