xfs: include reservations in quota reporting
Report all quota usage including the currently pending reservations. This avoids the need to flush delalloc space before gathering quota information, and matches quota enforcement, which already takes the reservations into account. This fixes xfstests 270. Reviewed-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Ben Myers <bpm@sgi.com>
This commit is contained in:
Родитель
18535a7e01
Коммит
8960501191
|
@ -40,28 +40,28 @@
|
|||
STATIC void
|
||||
xfs_fill_statvfs_from_dquot(
|
||||
struct kstatfs *statp,
|
||||
xfs_disk_dquot_t *dp)
|
||||
struct xfs_dquot *dqp)
|
||||
{
|
||||
__uint64_t limit;
|
||||
|
||||
limit = dp->d_blk_softlimit ?
|
||||
be64_to_cpu(dp->d_blk_softlimit) :
|
||||
be64_to_cpu(dp->d_blk_hardlimit);
|
||||
limit = dqp->q_core.d_blk_softlimit ?
|
||||
be64_to_cpu(dqp->q_core.d_blk_softlimit) :
|
||||
be64_to_cpu(dqp->q_core.d_blk_hardlimit);
|
||||
if (limit && statp->f_blocks > limit) {
|
||||
statp->f_blocks = limit;
|
||||
statp->f_bfree = statp->f_bavail =
|
||||
(statp->f_blocks > be64_to_cpu(dp->d_bcount)) ?
|
||||
(statp->f_blocks - be64_to_cpu(dp->d_bcount)) : 0;
|
||||
(statp->f_blocks > dqp->q_res_bcount) ?
|
||||
(statp->f_blocks - dqp->q_res_bcount) : 0;
|
||||
}
|
||||
|
||||
limit = dp->d_ino_softlimit ?
|
||||
be64_to_cpu(dp->d_ino_softlimit) :
|
||||
be64_to_cpu(dp->d_ino_hardlimit);
|
||||
limit = dqp->q_core.d_ino_softlimit ?
|
||||
be64_to_cpu(dqp->q_core.d_ino_softlimit) :
|
||||
be64_to_cpu(dqp->q_core.d_ino_hardlimit);
|
||||
if (limit && statp->f_files > limit) {
|
||||
statp->f_files = limit;
|
||||
statp->f_ffree =
|
||||
(statp->f_files > be64_to_cpu(dp->d_icount)) ?
|
||||
(statp->f_ffree - be64_to_cpu(dp->d_icount)) : 0;
|
||||
(statp->f_files > dqp->q_res_icount) ?
|
||||
(statp->f_ffree - dqp->q_res_icount) : 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -82,7 +82,7 @@ xfs_qm_statvfs(
|
|||
xfs_dquot_t *dqp;
|
||||
|
||||
if (!xfs_qm_dqget(mp, NULL, xfs_get_projid(ip), XFS_DQ_PROJ, 0, &dqp)) {
|
||||
xfs_fill_statvfs_from_dquot(statp, &dqp->q_core);
|
||||
xfs_fill_statvfs_from_dquot(statp, dqp);
|
||||
xfs_qm_dqput(dqp);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -758,8 +758,8 @@ xfs_qm_scall_getquota(
|
|||
XFS_FSB_TO_BB(mp, be64_to_cpu(dqp->q_core.d_blk_softlimit));
|
||||
dst->d_ino_hardlimit = be64_to_cpu(dqp->q_core.d_ino_hardlimit);
|
||||
dst->d_ino_softlimit = be64_to_cpu(dqp->q_core.d_ino_softlimit);
|
||||
dst->d_bcount = XFS_FSB_TO_BB(mp, be64_to_cpu(dqp->q_core.d_bcount));
|
||||
dst->d_icount = be64_to_cpu(dqp->q_core.d_icount);
|
||||
dst->d_bcount = XFS_FSB_TO_BB(mp, dqp->q_res_bcount);
|
||||
dst->d_icount = dqp->q_res_icount;
|
||||
dst->d_btimer = be32_to_cpu(dqp->q_core.d_btimer);
|
||||
dst->d_itimer = be32_to_cpu(dqp->q_core.d_itimer);
|
||||
dst->d_iwarns = be16_to_cpu(dqp->q_core.d_iwarns);
|
||||
|
@ -768,7 +768,7 @@ xfs_qm_scall_getquota(
|
|||
XFS_FSB_TO_BB(mp, be64_to_cpu(dqp->q_core.d_rtb_hardlimit));
|
||||
dst->d_rtb_softlimit =
|
||||
XFS_FSB_TO_BB(mp, be64_to_cpu(dqp->q_core.d_rtb_softlimit));
|
||||
dst->d_rtbcount = XFS_FSB_TO_BB(mp, be64_to_cpu(dqp->q_core.d_rtbcount));
|
||||
dst->d_rtbcount = XFS_FSB_TO_BB(mp, dqp->q_res_rtbcount);
|
||||
dst->d_rtbtimer = be32_to_cpu(dqp->q_core.d_rtbtimer);
|
||||
dst->d_rtbwarns = be16_to_cpu(dqp->q_core.d_rtbwarns);
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче