2020-01-04 14:22:37

by Chengguang Xu

[permalink] [raw]
Subject: [f2fs-dev][PATCH 1/2] f2fs: fix miscounted block limit in f2fs_statfs_project()

statfs calculates Total/Used/Avail disk space in block unit,
so we should translate soft/hard prjquota limit to block unit
as well.

Below testing result shows the block/inode numbers of
Total/Used/Avail from df command are all correct afer
applying this patch.

[root@localhost quota-tools]\# ./repquota -P /dev/sdb1
*** Report for project quotas on device /dev/sdb1
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
Project used soft hard grace used soft hard grace
-----------------------------------------------------------
\#0 -- 4 0 0 1 0 0
\#101 -- 0 0 0 2 0 0
\#102 -- 0 10240 0 2 10 0
\#103 -- 0 0 20480 2 0 20
\#104 -- 0 10240 20480 2 10 20
\#105 -- 0 20480 10240 2 20 10

[root@localhost sdb1]\# lsattr -p t{1,2,3,4,5}
101 ----------------N-- t1/a1
102 ----------------N-- t2/a2
103 ----------------N-- t3/a3
104 ----------------N-- t4/a4
105 ----------------N-- t5/a5

[root@localhost sdb1]\# df -hi t{1,2,3,4,5}
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sdb1 2.4M 21 2.4M 1% /mnt/sdb1
/dev/sdb1 10 2 8 20% /mnt/sdb1
/dev/sdb1 20 2 18 10% /mnt/sdb1
/dev/sdb1 10 2 8 20% /mnt/sdb1
/dev/sdb1 10 2 8 20% /mnt/sdb1

[root@localhost sdb1]\# df -h t{1,2,3,4,5}
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 10G 489M 9.6G 5% /mnt/sdb1
/dev/sdb1 10M 0 10M 0% /mnt/sdb1
/dev/sdb1 20M 0 20M 0% /mnt/sdb1
/dev/sdb1 10M 0 10M 0% /mnt/sdb1
/dev/sdb1 10M 0 10M 0% /mnt/sdb1

Fixes: 909110c060f2 ("f2fs: choose hardlimit when softlimit is larger than hardlimit in f2fs_statfs_project()")
Signed-off-by: Chengguang Xu <[email protected]>
---
fs/f2fs/super.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
index 5111e1ffe58a..78efd0e76174 100644
--- a/fs/f2fs/super.c
+++ b/fs/f2fs/super.c
@@ -1219,6 +1219,8 @@ static int f2fs_statfs_project(struct super_block *sb,
if (dquot->dq_dqb.dqb_bhardlimit &&
(!limit || dquot->dq_dqb.dqb_bhardlimit < limit))
limit = dquot->dq_dqb.dqb_bhardlimit;
+ if (limit)
+ limit >>= sb->s_blocksize_bits;

if (limit && buf->f_blocks > limit) {
curblock = dquot->dq_dqb.dqb_curspace >> sb->s_blocksize_bits;
--
2.21.1




2020-01-07 11:29:22

by Chao Yu

[permalink] [raw]
Subject: Re: [f2fs-dev] [PATCH 1/2] f2fs: fix miscounted block limit in f2fs_statfs_project()

On 2020/1/4 22:20, Chengguang Xu wrote:
> statfs calculates Total/Used/Avail disk space in block unit,
> so we should translate soft/hard prjquota limit to block unit
> as well.
>
> Below testing result shows the block/inode numbers of
> Total/Used/Avail from df command are all correct afer
> applying this patch.
>
> [root@localhost quota-tools]\# ./repquota -P /dev/sdb1
> *** Report for project quotas on device /dev/sdb1
> Block grace time: 7days; Inode grace time: 7days
> Block limits File limits
> Project used soft hard grace used soft hard grace
> -----------------------------------------------------------
> \#0 -- 4 0 0 1 0 0
> \#101 -- 0 0 0 2 0 0
> \#102 -- 0 10240 0 2 10 0
> \#103 -- 0 0 20480 2 0 20
> \#104 -- 0 10240 20480 2 10 20
> \#105 -- 0 20480 10240 2 20 10
>
> [root@localhost sdb1]\# lsattr -p t{1,2,3,4,5}
> 101 ----------------N-- t1/a1
> 102 ----------------N-- t2/a2
> 103 ----------------N-- t3/a3
> 104 ----------------N-- t4/a4
> 105 ----------------N-- t5/a5
>
> [root@localhost sdb1]\# df -hi t{1,2,3,4,5}
> Filesystem Inodes IUsed IFree IUse% Mounted on
> /dev/sdb1 2.4M 21 2.4M 1% /mnt/sdb1
> /dev/sdb1 10 2 8 20% /mnt/sdb1
> /dev/sdb1 20 2 18 10% /mnt/sdb1
> /dev/sdb1 10 2 8 20% /mnt/sdb1
> /dev/sdb1 10 2 8 20% /mnt/sdb1
>
> [root@localhost sdb1]\# df -h t{1,2,3,4,5}
> Filesystem Size Used Avail Use% Mounted on
> /dev/sdb1 10G 489M 9.6G 5% /mnt/sdb1
> /dev/sdb1 10M 0 10M 0% /mnt/sdb1
> /dev/sdb1 20M 0 20M 0% /mnt/sdb1
> /dev/sdb1 10M 0 10M 0% /mnt/sdb1
> /dev/sdb1 10M 0 10M 0% /mnt/sdb1
>
> Fixes: 909110c060f2 ("f2fs: choose hardlimit when softlimit is larger than hardlimit in f2fs_statfs_project()")
> Signed-off-by: Chengguang Xu <[email protected]>

Reviewed-by: Chao Yu <[email protected]>

Thanks,