On Aug 16, 2017, at 9:41 AM, Jan Kara <jack@xxxxxxx> wrote: > > When dquot has space already allocated in a quota file, we just > overwrite that place when writing dquot. So we don't need any protection > against other modifications of quota file as these keep dquot in place. > > Signed-off-by: Jan Kara <jack@xxxxxxx> Reviewed-by: Andreas Dilger <adilger@xxxxxxxxx> > --- > fs/quota/quota_v2.c | 17 ++++++++++++++--- > 1 file changed, 14 insertions(+), 3 deletions(-) > > diff --git a/fs/quota/quota_v2.c b/fs/quota/quota_v2.c > index 482733abe4ac..7a05b80f3b8c 100644 > --- a/fs/quota/quota_v2.c > +++ b/fs/quota/quota_v2.c > @@ -300,12 +300,23 @@ static int v2_write_dquot(struct dquot *dquot) > { > struct quota_info *dqopt = sb_dqopt(dquot->dq_sb); > int ret; > - > - down_write(&dqopt->dqio_sem); > + bool alloc = false; > + > + /* > + * If space for dquot is already allocated, we don't need any > + * protection as we'll only overwrite the place of dquot. We are > + * still protected by concurrent writes of the same dquot by > + * dquot->dq_lock. > + */ > + if (!dquot->dq_off) { > + alloc = true; > + down_write(&dqopt->dqio_sem); > + } > ret = qtree_write_dquot( > sb_dqinfo(dquot->dq_sb, dquot->dq_id.type)->dqi_priv, > dquot); > - up_write(&dqopt->dqio_sem); > + if (alloc) > + up_write(&dqopt->dqio_sem); > return ret; > } > > -- > 2.12.3 > Cheers, Andreas
Attachment:
signature.asc
Description: Message signed with OpenPGP