Re: [Stable-review] [31/74] quota: Dont write quota info indquot_commit()

From: Ben Hutchings
Date: Wed Apr 13 2011 - 23:10:04 EST


On Wed, 2011-04-13 at 08:50 -0700, Greg KH wrote:
> 2.6.32-longterm review patch. If anyone has any objections, please let us know.
>
> ------------------
>
> From: Jan Kara <jack@xxxxxxx>
>
> commit b03f24567ce7caf2420b8be4c6eb74c191d59a91 upstream.
>
> 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).
[...]
> @@ -400,15 +400,10 @@ int dquot_commit(struct dquot *dquot)
> spin_unlock(&dq_list_lock);
> /* Inactive dquot can be only if there was error during read/init
> * => 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);
> - if (info_dirty(&dqopt->info[dquot->dq_type])) {
> - ret2 = dqopt->ops[dquot->dq_type]->write_file_info(
> - dquot->dq_sb, dquot->dq_type);
> - }
> - if (ret >= 0)
> - ret = ret2;
> - }
> + else
> + ret = -EIO;
[...]

Why is the return value for the flag-not-set case changed from 0 to
-EIO? Is this really part of the same bug fix?

Ben.

--
Ben Hutchings
Once a job is fouled up, anything done to improve it makes it worse.

Attachment: signature.asc
Description: This is a digitally signed message part