mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-10-22 23:13:01 +02:00
xfs: report realtime block quota limits on realtime directories
[ Upstream commit9a17ebfea9] On the data device, calling statvfs on a projinherit directory results in the block and avail counts being curtailed to the project quota block limits, if any are set. Do the same for realtime files or directories, only use the project quota rt block limits. Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de> Stable-dep-of:4b8d867ca6("xfs: don't over-report free space or inodes in statvfs") Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
d25041d4a3
commit
bd015e2e7f
|
|
@ -19,18 +19,24 @@
|
|||
STATIC void
|
||||
xfs_fill_statvfs_from_dquot(
|
||||
struct kstatfs *statp,
|
||||
struct xfs_inode *ip,
|
||||
struct xfs_dquot *dqp)
|
||||
{
|
||||
struct xfs_dquot_res *blkres = &dqp->q_blk;
|
||||
uint64_t limit;
|
||||
|
||||
limit = dqp->q_blk.softlimit ?
|
||||
dqp->q_blk.softlimit :
|
||||
dqp->q_blk.hardlimit;
|
||||
if (XFS_IS_REALTIME_MOUNT(ip->i_mount) &&
|
||||
(ip->i_diflags & (XFS_DIFLAG_RTINHERIT | XFS_DIFLAG_REALTIME)))
|
||||
blkres = &dqp->q_rtb;
|
||||
|
||||
limit = blkres->softlimit ?
|
||||
blkres->softlimit :
|
||||
blkres->hardlimit;
|
||||
if (limit && statp->f_blocks > limit) {
|
||||
statp->f_blocks = limit;
|
||||
statp->f_bfree = statp->f_bavail =
|
||||
(statp->f_blocks > dqp->q_blk.reserved) ?
|
||||
(statp->f_blocks - dqp->q_blk.reserved) : 0;
|
||||
(statp->f_blocks > blkres->reserved) ?
|
||||
(statp->f_blocks - blkres->reserved) : 0;
|
||||
}
|
||||
|
||||
limit = dqp->q_ino.softlimit ?
|
||||
|
|
@ -61,7 +67,7 @@ xfs_qm_statvfs(
|
|||
struct xfs_dquot *dqp;
|
||||
|
||||
if (!xfs_qm_dqget(mp, ip->i_projid, XFS_DQTYPE_PROJ, false, &dqp)) {
|
||||
xfs_fill_statvfs_from_dquot(statp, dqp);
|
||||
xfs_fill_statvfs_from_dquot(statp, ip, dqp);
|
||||
xfs_qm_dqput(dqp);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -837,12 +837,6 @@ xfs_fs_statfs(
|
|||
ffree = statp->f_files - (icount - ifree);
|
||||
statp->f_ffree = max_t(int64_t, ffree, 0);
|
||||
|
||||
|
||||
if ((ip->i_diflags & XFS_DIFLAG_PROJINHERIT) &&
|
||||
((mp->m_qflags & (XFS_PQUOTA_ACCT|XFS_PQUOTA_ENFD))) ==
|
||||
(XFS_PQUOTA_ACCT|XFS_PQUOTA_ENFD))
|
||||
xfs_qm_statvfs(ip, statp);
|
||||
|
||||
if (XFS_IS_REALTIME_MOUNT(mp) &&
|
||||
(ip->i_diflags & (XFS_DIFLAG_RTINHERIT | XFS_DIFLAG_REALTIME))) {
|
||||
statp->f_blocks = sbp->sb_rblocks;
|
||||
|
|
@ -850,6 +844,11 @@ xfs_fs_statfs(
|
|||
sbp->sb_frextents * sbp->sb_rextsize;
|
||||
}
|
||||
|
||||
if ((ip->i_diflags & XFS_DIFLAG_PROJINHERIT) &&
|
||||
((mp->m_qflags & (XFS_PQUOTA_ACCT|XFS_PQUOTA_ENFD))) ==
|
||||
(XFS_PQUOTA_ACCT|XFS_PQUOTA_ENFD))
|
||||
xfs_qm_statvfs(ip, statp);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user