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

From: Greg Kroah-Hartman
Date: Fri Feb 07 2020 - 05:19:39 EST


On Sat, Feb 01, 2020 at 05:24:25PM +0800, Chengguang Xu wrote:
> ---- å ææå, 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.
> >
>
>
> Hi Greg, Sasha
>
> Now the fix patch has been in Linus's tree, you can add below three patches together to backport list.
>
>
> commit 909110c060f22e6 "f2fs: choose hardlimit when softlimit is larger than hardlimit in f2fs_statfs_project()"
> commit acdf2172172a511 "f2fs: fix miscounted block limit in f2fs_statfs_project()"
> commit bf2cbd3c57159c2 "f2fs: code cleanup for f2fs_statfs_project()"

All now queued up, thanks for letting us know.

greg k-h