* [PATCH] quota: correct space limit check
@ 2017-08-07 13:35 zhangyi (F)
2017-08-07 14:49 ` Jan Kara
0 siblings, 1 reply; 2+ messages in thread
From: zhangyi (F) @ 2017-08-07 13:35 UTC (permalink / raw)
To: linux-fsdevel, jack; +Cc: yi.zhang, miaoxie
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) <yi.zhang@huawei.com>
---
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
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] quota: correct space limit check
2017-08-07 13:35 [PATCH] quota: correct space limit check zhangyi (F)
@ 2017-08-07 14:49 ` Jan Kara
0 siblings, 0 replies; 2+ messages in thread
From: Jan Kara @ 2017-08-07 14:49 UTC (permalink / raw)
To: zhangyi (F); +Cc: linux-fsdevel, jack, miaoxie
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) <yi.zhang@huawei.com>
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 <jack@suse.com>
SUSE Labs, CR
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2017-08-07 14:49 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-08-07 13:35 [PATCH] quota: correct space limit check zhangyi (F)
2017-08-07 14:49 ` Jan Kara
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).