quota: Fix issuing of warnings from dquot_transfer
authorJan Kara <jack@suse.cz>
Mon, 11 Oct 2010 13:22:21 +0000 (15:22 +0200)
committerJan Kara <jack@suse.cz>
Wed, 27 Oct 2010 23:30:03 +0000 (01:30 +0200)
__dquot_transfer accidentally called flush_warnings for a wrong set of
dquots which could result in quota warnings being issued with a wrong
identification. Also when operation fails because of EDQUOT, there's no
need check for issuing information message about user getting below limits
(no transfer has actually happened).

Signed-off-by: Jan Kara <jack@suse.cz>
fs/quota/dquot.c

index ed14bee..1bc38f5 100644 (file)
@@ -1805,20 +1805,19 @@ int __dquot_transfer(struct inode *inode, struct dquot **transfer_to)
 
        mark_all_dquot_dirty(transfer_from);
        mark_all_dquot_dirty(transfer_to);
+       flush_warnings(transfer_to, warntype_to);
+       flush_warnings(transfer_from, warntype_from_inodes);
+       flush_warnings(transfer_from, warntype_from_space);
        /* Pass back references to put */
        for (cnt = 0; cnt < MAXQUOTAS; cnt++)
                if (is_valid[cnt])
                        transfer_to[cnt] = transfer_from[cnt];
-
-warn:
-       flush_warnings(transfer_to, warntype_to);
-       flush_warnings(transfer_from, warntype_from_inodes);
-       flush_warnings(transfer_from, warntype_from_space);
-       return ret;
+       return 0;
 over_quota:
        spin_unlock(&dq_data_lock);
        up_write(&sb_dqopt(inode->i_sb)->dqptr_sem);
-       goto warn;
+       flush_warnings(transfer_to, warntype_to);
+       return ret;
 }
 EXPORT_SYMBOL(__dquot_transfer);