diff -Nur linux-2.4.19.old/fs/ext3/inode.c linux-2.4.19.new/fs/ext3/inode.c --- linux-2.4.19.old/fs/ext3/inode.c 2002-10-16 00:10:45.000000000 +0200 +++ linux-2.4.19.new/fs/ext3/inode.c 2002-10-16 00:32:15.000000000 +0200 @@ -2415,8 +2415,6 @@ } rc = inode_setattr(inode, attr); - if (!error) - error = rc; /* If inode_setattr's call to ext3_truncate failed to get a * transaction handle at all, we need to clean up the in-core @@ -2425,7 +2423,7 @@ ext3_orphan_del(NULL, inode); #ifdef CONFIG_EXT3_FS_POSIX_ACL - if (!error && (ia_valid & ATTR_MODE)) { + if (!rc && (ia_valid & ATTR_MODE)) { handle_t *handle; handle = ext3_journal_start(inode, EXT3_XATTR_TRANS_BLOCKS); @@ -2435,17 +2433,17 @@ } if (!(ia_valid & ATTR_SIZE)) down(&inode->i_sem); - error = ext3_acl_chmod(handle, inode); + rc = ext3_acl_chmod(handle, inode); if (!(ia_valid & ATTR_SIZE)) up(&inode->i_sem); - rc = ext3_journal_stop(handle, inode); - if (!error) - error = rc; + ext3_journal_stop(handle, inode); } #endif err_out: ext3_std_error(inode->i_sb, error); + if (!error) + error = rc; return error; }