quota: Fix issuing of warnings from dquot_transfer
__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>
This commit is contained in:
parent
9e32784b71
commit
86f3cbec4a
@ -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_from);
|
||||||
mark_all_dquot_dirty(transfer_to);
|
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 */
|
/* Pass back references to put */
|
||||||
for (cnt = 0; cnt < MAXQUOTAS; cnt++)
|
for (cnt = 0; cnt < MAXQUOTAS; cnt++)
|
||||||
if (is_valid[cnt])
|
if (is_valid[cnt])
|
||||||
transfer_to[cnt] = transfer_from[cnt];
|
transfer_to[cnt] = transfer_from[cnt];
|
||||||
|
return 0;
|
||||||
warn:
|
|
||||||
flush_warnings(transfer_to, warntype_to);
|
|
||||||
flush_warnings(transfer_from, warntype_from_inodes);
|
|
||||||
flush_warnings(transfer_from, warntype_from_space);
|
|
||||||
return ret;
|
|
||||||
over_quota:
|
over_quota:
|
||||||
spin_unlock(&dq_data_lock);
|
spin_unlock(&dq_data_lock);
|
||||||
up_write(&sb_dqopt(inode->i_sb)->dqptr_sem);
|
up_write(&sb_dqopt(inode->i_sb)->dqptr_sem);
|
||||||
goto warn;
|
flush_warnings(transfer_to, warntype_to);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(__dquot_transfer);
|
EXPORT_SYMBOL(__dquot_transfer);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user