From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx2.suse.de ([195.135.220.15]:47454 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751899AbdHGOt4 (ORCPT ); Mon, 7 Aug 2017 10:49:56 -0400 Date: Mon, 7 Aug 2017 16:49:54 +0200 From: Jan Kara To: "zhangyi (F)" Cc: linux-fsdevel@vger.kernel.org, jack@suse.cz, miaoxie@huawei.com Subject: Re: [PATCH] quota: correct space limit check Message-ID: <20170807144954.GD6470@quack2.suse.cz> References: <1502112905-9525-1-git-send-email-yi.zhang@huawei.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1502112905-9525-1-git-send-email-yi.zhang@huawei.com> Sender: linux-fsdevel-owner@vger.kernel.org List-ID: On Mon 07-08-17 21:35:05, zhangyi (F) wrote: > Currently we compare total space (curspace + rsvspace) > with space limit in quota-tools when setting grace time > and also in check_bdq(), but we missing rsvspace in > somewhere else, correct them. This patch also fix incorrect > zero dqb_btime and grace time updating failure when we use > rsvspace(e.g. ext4 dalloc feature). > > Signed-off-by: zhangyi (F) Thanks for the patch. I'll merge it through my tree. Honza > --- > fs/quota/dquot.c | 21 +++++++++++++++------ > 1 file changed, 15 insertions(+), 6 deletions(-) > > diff --git a/fs/quota/dquot.c b/fs/quota/dquot.c > index 53a1749..566e6ef 100644 > --- a/fs/quota/dquot.c > +++ b/fs/quota/dquot.c > @@ -1124,6 +1124,10 @@ void dquot_free_reserved_space(struct dquot *dquot, qsize_t number) > WARN_ON_ONCE(1); > dquot->dq_dqb.dqb_rsvspace = 0; > } > + if (dquot->dq_dqb.dqb_curspace + dquot->dq_dqb.dqb_rsvspace <= > + dquot->dq_dqb.dqb_bsoftlimit) > + dquot->dq_dqb.dqb_btime = (time64_t) 0; > + clear_bit(DQ_BLKS_B, &dquot->dq_flags); > } > > static void dquot_decr_inodes(struct dquot *dquot, qsize_t number) > @@ -1145,7 +1149,8 @@ static void dquot_decr_space(struct dquot *dquot, qsize_t number) > dquot->dq_dqb.dqb_curspace -= number; > else > dquot->dq_dqb.dqb_curspace = 0; > - if (dquot->dq_dqb.dqb_curspace <= dquot->dq_dqb.dqb_bsoftlimit) > + if (dquot->dq_dqb.dqb_curspace + dquot->dq_dqb.dqb_rsvspace <= > + dquot->dq_dqb.dqb_bsoftlimit) > dquot->dq_dqb.dqb_btime = (time64_t) 0; > clear_bit(DQ_BLKS_B, &dquot->dq_flags); > } > @@ -1381,14 +1386,18 @@ static int info_idq_free(struct dquot *dquot, qsize_t inodes) > > static int info_bdq_free(struct dquot *dquot, qsize_t space) > { > + qsize_t tspace; > + > + tspace = dquot->dq_dqb.dqb_curspace + dquot->dq_dqb.dqb_rsvspace; > + > if (test_bit(DQ_FAKE_B, &dquot->dq_flags) || > - dquot->dq_dqb.dqb_curspace <= dquot->dq_dqb.dqb_bsoftlimit) > + tspace <= dquot->dq_dqb.dqb_bsoftlimit) > return QUOTA_NL_NOWARN; > > - if (dquot->dq_dqb.dqb_curspace - space <= dquot->dq_dqb.dqb_bsoftlimit) > + if (tspace - space <= dquot->dq_dqb.dqb_bsoftlimit) > return QUOTA_NL_BSOFTBELOW; > - if (dquot->dq_dqb.dqb_curspace >= dquot->dq_dqb.dqb_bhardlimit && > - dquot->dq_dqb.dqb_curspace - space < dquot->dq_dqb.dqb_bhardlimit) > + if (tspace >= dquot->dq_dqb.dqb_bhardlimit && > + tspace - space < dquot->dq_dqb.dqb_bhardlimit) > return QUOTA_NL_BHARDBELOW; > return QUOTA_NL_NOWARN; > } > @@ -2681,7 +2690,7 @@ static int do_set_dqblk(struct dquot *dquot, struct qc_dqblk *di) > > if (check_blim) { > if (!dm->dqb_bsoftlimit || > - dm->dqb_curspace < dm->dqb_bsoftlimit) { > + dm->dqb_curspace + dm->dqb_rsvspace < dm->dqb_bsoftlimit) { > dm->dqb_btime = 0; > clear_bit(DQ_BLKS_B, &dquot->dq_flags); > } else if (!(di->d_fieldmask & QC_SPC_TIMER)) > -- > 2.5.0 > -- Jan Kara SUSE Labs, CR