Commit b03f2456 authored by Jan Kara's avatar Jan Kara

quota: Don't write quota info in dquot_commit()

There's no reason to write quota info in dquot_commit(). The writing is a
relict from the old days when we didn't have dquot_acquire() and
dquot_release() and thus dquot_commit() could have created / removed quota
structures from the file. These days dquot_commit() only updates usage counters
/ limits in quota structure and thus there's no need to write quota info.

This also fixes an issue with journaling filesystem which didn't reserve
enough space in the transaction for write of quota info (it could have been
dirty at the time of dquot_commit() because of a race with other operation
changing it).

CC: stable@kernel.org
Reported-and-tested-by: default avatarLukas Czerner <lczerner@redhat.com>
Signed-off-by: default avatarJan Kara <jack@suse.cz>
parent 523334ba
...@@ -442,7 +442,7 @@ EXPORT_SYMBOL(dquot_acquire); ...@@ -442,7 +442,7 @@ EXPORT_SYMBOL(dquot_acquire);
*/ */
int dquot_commit(struct dquot *dquot) int dquot_commit(struct dquot *dquot)
{ {
int ret = 0, ret2 = 0; int ret = 0;
struct quota_info *dqopt = sb_dqopt(dquot->dq_sb); struct quota_info *dqopt = sb_dqopt(dquot->dq_sb);
mutex_lock(&dqopt->dqio_mutex); mutex_lock(&dqopt->dqio_mutex);
...@@ -454,15 +454,10 @@ int dquot_commit(struct dquot *dquot) ...@@ -454,15 +454,10 @@ int dquot_commit(struct dquot *dquot)
spin_unlock(&dq_list_lock); spin_unlock(&dq_list_lock);
/* Inactive dquot can be only if there was error during read/init /* Inactive dquot can be only if there was error during read/init
* => we have better not writing it */ * => we have better not writing it */
if (test_bit(DQ_ACTIVE_B, &dquot->dq_flags)) { if (test_bit(DQ_ACTIVE_B, &dquot->dq_flags))
ret = dqopt->ops[dquot->dq_type]->commit_dqblk(dquot); ret = dqopt->ops[dquot->dq_type]->commit_dqblk(dquot);
if (info_dirty(&dqopt->info[dquot->dq_type])) { else
ret2 = dqopt->ops[dquot->dq_type]->write_file_info( ret = -EIO;
dquot->dq_sb, dquot->dq_type);
}
if (ret >= 0)
ret = ret2;
}
out_sem: out_sem:
mutex_unlock(&dqopt->dqio_mutex); mutex_unlock(&dqopt->dqio_mutex);
return ret; return ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment