xfs: ensure f_bfree returned by statfs() is non-negative
Construct an img like this: dd if=/dev/zero of=xfs.img bs=1M count=20 mkfs.xfs -d agcount=1 xfs.img xfs_db -x xfs.img sb 0 write fdblocks 0 agf 0 write freeblks 0 write longest 0 quit mount it, df -h /mnt(xfs mount point), will show this: Filesystem Size Used Avail Use% Mounted on /dev/loop0 17M -64Z -32K 100% /mnt Reported-by: Hulk Robot <hulkci@huawei.com> Signed-off-by: Zheng Bin <zhengbin13@huawei.com> Reviewed-by: Brian Foster <bfoster@redhat.com> Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
This commit is contained in:
parent
3d60548b21
commit
237aac4624
@ -807,7 +807,8 @@ xfs_fs_statfs(
|
||||
statp->f_blocks = sbp->sb_dblocks - lsize;
|
||||
spin_unlock(&mp->m_sb_lock);
|
||||
|
||||
statp->f_bfree = fdblocks - mp->m_alloc_set_aside;
|
||||
/* make sure statp->f_bfree does not underflow */
|
||||
statp->f_bfree = max_t(int64_t, fdblocks - mp->m_alloc_set_aside, 0);
|
||||
statp->f_bavail = statp->f_bfree;
|
||||
|
||||
fakeinos = XFS_FSB_TO_INO(mp, statp->f_bfree);
|
||||
|
Loading…
Reference in New Issue
Block a user