Re: [PATCH 4.19 062/114] f2fs: choose hardlimit when softlimit is larger than hardlimit in f2fs_statfs_project()

From: Chengguang Xu
Date: Sat Jan 04 2020 - 09:21:22 EST


---- å ææå, 2020-01-04 19:53:08 Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> æå ----
> On Sat, Jan 04, 2020 at 09:50:43AM +0800, Chengguang Xu wrote:
> > ---- å ææå, 2020-01-04 01:12:13 Pavel Machek <pavel@xxxxxxx> æå ----
> > > Hi!
> > >
> > > > From: Chengguang Xu <cgxu519@xxxxxxxxxxxx>
> > > >
> > > > [ Upstream commit 909110c060f22e65756659ec6fa957ae75777e00 ]
> > > >
> > > > Setting softlimit larger than hardlimit seems meaningless
> > > > for disk quota but currently it is allowed. In this case,
> > > > there may be a bit of comfusion for users when they run
> > > > df comamnd to directory which has project quota.
> > > >
> > > > For example, we set 20M softlimit and 10M hardlimit of
> > > > block usage limit for project quota of test_dir(project id 123).
> > >
> > > > Signed-off-by: Chengguang Xu <cgxu519@xxxxxxxxxxxx>
> > > > Reviewed-by: Chao Yu <yuchao0@xxxxxxxxxx>
> > > > Signed-off-by: Jaegeuk Kim <jaegeuk@xxxxxxxxxx>
> > > > Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>
> > > > ---
> > > > fs/f2fs/super.c | 20 ++++++++++++++------
> > > > 1 file changed, 14 insertions(+), 6 deletions(-)
> > > >
> > > > diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
> > > > index 7a9cc64f5ca3..662c7de58b99 100644
> > > > --- a/fs/f2fs/super.c
> > > > +++ b/fs/f2fs/super.c
> > > > @@ -1148,9 +1148,13 @@ static int f2fs_statfs_project(struct super_block *sb,
> > > > return PTR_ERR(dquot);
> > > > spin_lock(&dquot->dq_dqb_lock);
> > > >
> > > > - limit = (dquot->dq_dqb.dqb_bsoftlimit ?
> > > > - dquot->dq_dqb.dqb_bsoftlimit :
> > > > - dquot->dq_dqb.dqb_bhardlimit) >> sb->s_blocksize_bits;
> > > > + limit = 0;
> > > > + if (dquot->dq_dqb.dqb_bsoftlimit)
> > > > + limit = dquot->dq_dqb.dqb_bsoftlimit;
> > > > + if (dquot->dq_dqb.dqb_bhardlimit &&
> > > > + (!limit || dquot->dq_dqb.dqb_bhardlimit < limit))
> > > > + limit = dquot->dq_dqb.dqb_bhardlimit;
> > > > +
> > > > if (limit && buf->f_blocks > limit) {
> > >
> > > >> blocksize disappeared here. That can't be right.
> > >
> > > Plus, is this just obfuscated way of saying
> > >
> > > limit = min_not_zero(dquot->dq_dqb.dqb_bsoftlimit, dquot->dq_dqb.dqb_bhardlimit)?
> > >
> >
> > Please skip this patch from stable list, I'll send a revised patch to upstream.
>
> This patch is already in Linus's tree, so you can't send a "revised"
> version, only one that applies on top of this one :)
>
> That being said, I'll go drop this from the stable queues, thanks.
> Please let us know when the fixed patch is in Linus's tree and we will
> be glad to take both of them.

I got it, Thanks Greg!