ocfs2: do not overwrite error codes in ocfs2_init_acl
authorTiger Yang <tiger.yang@oracle.com>
Fri, 16 Jul 2010 03:21:23 +0000 (11:21 +0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 26 Aug 2010 23:41:35 +0000 (16:41 -0700)
commit 6eda3dd33f8a0ce58ee56a11351758643a698db4 upstream.

Setting the acl while creating a new inode depends on
the error codes of posix_acl_create_masq. This patch fix
a issue of overwriting the error codes of it.

Reported-by: Pawel Zawora <pzawora@gmail.com>
Signed-off-by: Tiger Yang <tiger.yang@oracle.com>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
fs/ocfs2/acl.c

index d8fe53a6f8df53a1e495cf2aeb390ce46238ac79..ff43e8758746033aa10590b239dff3101704b694 100644 (file)
@@ -347,7 +347,7 @@ int ocfs2_init_acl(handle_t *handle,
 {
        struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
        struct posix_acl *acl = NULL;
-       int ret = 0;
+       int ret = 0, ret2;
        mode_t mode;
 
        if (!S_ISLNK(inode->i_mode)) {
@@ -384,7 +384,12 @@ int ocfs2_init_acl(handle_t *handle,
                mode = inode->i_mode;
                ret = posix_acl_create_masq(clone, &mode);
                if (ret >= 0) {
-                       ret = ocfs2_acl_set_mode(inode, di_bh, handle, mode);
+                       ret2 = ocfs2_acl_set_mode(inode, di_bh, handle, mode);
+                       if (ret2) {
+                               mlog_errno(ret2);
+                               ret = ret2;
+                               goto cleanup;
+                       }
                        if (ret > 0) {
                                ret = ocfs2_set_acl(handle, inode,
                                                    di_bh, ACL_TYPE_ACCESS,