mirror of https://gitee.com/openkylin/linux.git
xfs: change available ranges of softlimit and hardlimit in quota check
In general, quota allows us to use disk blocks and inodes up to each
limit, that is, they are available if they don't exceed their limitations.
Current xfs sets their available ranges to lower than them except disk
inode quota check. So, this patch changes the ranges to not beyond them.
Signed-off-by: Mitsuo Hayasaka <mitsuo.hayasaka.hu@hitachi.com>
Cc: Ben Myers <bpm@sgi.com>
Cc: Alex Elder <elder@kernel.org>
Cc: Christoph Hellwig <hch@lst.de>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Mark Tinguely <tinguely@sgi.com>
Signed-off-by: Ben Myers <bpm@sgi.com>
(cherry picked from commit 20f12d8ac0
)
This commit is contained in:
parent
f65020a83a
commit
d0a3fe67e3
|
@ -139,10 +139,10 @@ xfs_qm_adjust_dqtimers(
|
||||||
|
|
||||||
if (!d->d_btimer) {
|
if (!d->d_btimer) {
|
||||||
if ((d->d_blk_softlimit &&
|
if ((d->d_blk_softlimit &&
|
||||||
(be64_to_cpu(d->d_bcount) >=
|
(be64_to_cpu(d->d_bcount) >
|
||||||
be64_to_cpu(d->d_blk_softlimit))) ||
|
be64_to_cpu(d->d_blk_softlimit))) ||
|
||||||
(d->d_blk_hardlimit &&
|
(d->d_blk_hardlimit &&
|
||||||
(be64_to_cpu(d->d_bcount) >=
|
(be64_to_cpu(d->d_bcount) >
|
||||||
be64_to_cpu(d->d_blk_hardlimit)))) {
|
be64_to_cpu(d->d_blk_hardlimit)))) {
|
||||||
d->d_btimer = cpu_to_be32(get_seconds() +
|
d->d_btimer = cpu_to_be32(get_seconds() +
|
||||||
mp->m_quotainfo->qi_btimelimit);
|
mp->m_quotainfo->qi_btimelimit);
|
||||||
|
@ -151,10 +151,10 @@ xfs_qm_adjust_dqtimers(
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if ((!d->d_blk_softlimit ||
|
if ((!d->d_blk_softlimit ||
|
||||||
(be64_to_cpu(d->d_bcount) <
|
(be64_to_cpu(d->d_bcount) <=
|
||||||
be64_to_cpu(d->d_blk_softlimit))) &&
|
be64_to_cpu(d->d_blk_softlimit))) &&
|
||||||
(!d->d_blk_hardlimit ||
|
(!d->d_blk_hardlimit ||
|
||||||
(be64_to_cpu(d->d_bcount) <
|
(be64_to_cpu(d->d_bcount) <=
|
||||||
be64_to_cpu(d->d_blk_hardlimit)))) {
|
be64_to_cpu(d->d_blk_hardlimit)))) {
|
||||||
d->d_btimer = 0;
|
d->d_btimer = 0;
|
||||||
}
|
}
|
||||||
|
@ -162,10 +162,10 @@ xfs_qm_adjust_dqtimers(
|
||||||
|
|
||||||
if (!d->d_itimer) {
|
if (!d->d_itimer) {
|
||||||
if ((d->d_ino_softlimit &&
|
if ((d->d_ino_softlimit &&
|
||||||
(be64_to_cpu(d->d_icount) >=
|
(be64_to_cpu(d->d_icount) >
|
||||||
be64_to_cpu(d->d_ino_softlimit))) ||
|
be64_to_cpu(d->d_ino_softlimit))) ||
|
||||||
(d->d_ino_hardlimit &&
|
(d->d_ino_hardlimit &&
|
||||||
(be64_to_cpu(d->d_icount) >=
|
(be64_to_cpu(d->d_icount) >
|
||||||
be64_to_cpu(d->d_ino_hardlimit)))) {
|
be64_to_cpu(d->d_ino_hardlimit)))) {
|
||||||
d->d_itimer = cpu_to_be32(get_seconds() +
|
d->d_itimer = cpu_to_be32(get_seconds() +
|
||||||
mp->m_quotainfo->qi_itimelimit);
|
mp->m_quotainfo->qi_itimelimit);
|
||||||
|
@ -174,10 +174,10 @@ xfs_qm_adjust_dqtimers(
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if ((!d->d_ino_softlimit ||
|
if ((!d->d_ino_softlimit ||
|
||||||
(be64_to_cpu(d->d_icount) <
|
(be64_to_cpu(d->d_icount) <=
|
||||||
be64_to_cpu(d->d_ino_softlimit))) &&
|
be64_to_cpu(d->d_ino_softlimit))) &&
|
||||||
(!d->d_ino_hardlimit ||
|
(!d->d_ino_hardlimit ||
|
||||||
(be64_to_cpu(d->d_icount) <
|
(be64_to_cpu(d->d_icount) <=
|
||||||
be64_to_cpu(d->d_ino_hardlimit)))) {
|
be64_to_cpu(d->d_ino_hardlimit)))) {
|
||||||
d->d_itimer = 0;
|
d->d_itimer = 0;
|
||||||
}
|
}
|
||||||
|
@ -185,10 +185,10 @@ xfs_qm_adjust_dqtimers(
|
||||||
|
|
||||||
if (!d->d_rtbtimer) {
|
if (!d->d_rtbtimer) {
|
||||||
if ((d->d_rtb_softlimit &&
|
if ((d->d_rtb_softlimit &&
|
||||||
(be64_to_cpu(d->d_rtbcount) >=
|
(be64_to_cpu(d->d_rtbcount) >
|
||||||
be64_to_cpu(d->d_rtb_softlimit))) ||
|
be64_to_cpu(d->d_rtb_softlimit))) ||
|
||||||
(d->d_rtb_hardlimit &&
|
(d->d_rtb_hardlimit &&
|
||||||
(be64_to_cpu(d->d_rtbcount) >=
|
(be64_to_cpu(d->d_rtbcount) >
|
||||||
be64_to_cpu(d->d_rtb_hardlimit)))) {
|
be64_to_cpu(d->d_rtb_hardlimit)))) {
|
||||||
d->d_rtbtimer = cpu_to_be32(get_seconds() +
|
d->d_rtbtimer = cpu_to_be32(get_seconds() +
|
||||||
mp->m_quotainfo->qi_rtbtimelimit);
|
mp->m_quotainfo->qi_rtbtimelimit);
|
||||||
|
@ -197,10 +197,10 @@ xfs_qm_adjust_dqtimers(
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if ((!d->d_rtb_softlimit ||
|
if ((!d->d_rtb_softlimit ||
|
||||||
(be64_to_cpu(d->d_rtbcount) <
|
(be64_to_cpu(d->d_rtbcount) <=
|
||||||
be64_to_cpu(d->d_rtb_softlimit))) &&
|
be64_to_cpu(d->d_rtb_softlimit))) &&
|
||||||
(!d->d_rtb_hardlimit ||
|
(!d->d_rtb_hardlimit ||
|
||||||
(be64_to_cpu(d->d_rtbcount) <
|
(be64_to_cpu(d->d_rtbcount) <=
|
||||||
be64_to_cpu(d->d_rtb_hardlimit)))) {
|
be64_to_cpu(d->d_rtb_hardlimit)))) {
|
||||||
d->d_rtbtimer = 0;
|
d->d_rtbtimer = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1981,7 +1981,7 @@ xfs_qm_dqcheck(
|
||||||
|
|
||||||
if (!errs && ddq->d_id) {
|
if (!errs && ddq->d_id) {
|
||||||
if (ddq->d_blk_softlimit &&
|
if (ddq->d_blk_softlimit &&
|
||||||
be64_to_cpu(ddq->d_bcount) >=
|
be64_to_cpu(ddq->d_bcount) >
|
||||||
be64_to_cpu(ddq->d_blk_softlimit)) {
|
be64_to_cpu(ddq->d_blk_softlimit)) {
|
||||||
if (!ddq->d_btimer) {
|
if (!ddq->d_btimer) {
|
||||||
if (flags & XFS_QMOPT_DOWARN)
|
if (flags & XFS_QMOPT_DOWARN)
|
||||||
|
@ -1992,7 +1992,7 @@ xfs_qm_dqcheck(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ddq->d_ino_softlimit &&
|
if (ddq->d_ino_softlimit &&
|
||||||
be64_to_cpu(ddq->d_icount) >=
|
be64_to_cpu(ddq->d_icount) >
|
||||||
be64_to_cpu(ddq->d_ino_softlimit)) {
|
be64_to_cpu(ddq->d_ino_softlimit)) {
|
||||||
if (!ddq->d_itimer) {
|
if (!ddq->d_itimer) {
|
||||||
if (flags & XFS_QMOPT_DOWARN)
|
if (flags & XFS_QMOPT_DOWARN)
|
||||||
|
@ -2003,7 +2003,7 @@ xfs_qm_dqcheck(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ddq->d_rtb_softlimit &&
|
if (ddq->d_rtb_softlimit &&
|
||||||
be64_to_cpu(ddq->d_rtbcount) >=
|
be64_to_cpu(ddq->d_rtbcount) >
|
||||||
be64_to_cpu(ddq->d_rtb_softlimit)) {
|
be64_to_cpu(ddq->d_rtb_softlimit)) {
|
||||||
if (!ddq->d_rtbtimer) {
|
if (!ddq->d_rtbtimer) {
|
||||||
if (flags & XFS_QMOPT_DOWARN)
|
if (flags & XFS_QMOPT_DOWARN)
|
||||||
|
|
|
@ -813,11 +813,11 @@ xfs_qm_export_dquot(
|
||||||
(XFS_IS_OQUOTA_ENFORCED(mp) &&
|
(XFS_IS_OQUOTA_ENFORCED(mp) &&
|
||||||
(dst->d_flags & (FS_PROJ_QUOTA | FS_GROUP_QUOTA)))) &&
|
(dst->d_flags & (FS_PROJ_QUOTA | FS_GROUP_QUOTA)))) &&
|
||||||
dst->d_id != 0) {
|
dst->d_id != 0) {
|
||||||
if (((int) dst->d_bcount >= (int) dst->d_blk_softlimit) &&
|
if (((int) dst->d_bcount > (int) dst->d_blk_softlimit) &&
|
||||||
(dst->d_blk_softlimit > 0)) {
|
(dst->d_blk_softlimit > 0)) {
|
||||||
ASSERT(dst->d_btimer != 0);
|
ASSERT(dst->d_btimer != 0);
|
||||||
}
|
}
|
||||||
if (((int) dst->d_icount >= (int) dst->d_ino_softlimit) &&
|
if (((int) dst->d_icount > (int) dst->d_ino_softlimit) &&
|
||||||
(dst->d_ino_softlimit > 0)) {
|
(dst->d_ino_softlimit > 0)) {
|
||||||
ASSERT(dst->d_itimer != 0);
|
ASSERT(dst->d_itimer != 0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -649,12 +649,12 @@ xfs_trans_dqresv(
|
||||||
* nblks.
|
* nblks.
|
||||||
*/
|
*/
|
||||||
if (hardlimit > 0ULL &&
|
if (hardlimit > 0ULL &&
|
||||||
hardlimit <= nblks + *resbcountp) {
|
hardlimit < nblks + *resbcountp) {
|
||||||
xfs_quota_warn(mp, dqp, QUOTA_NL_BHARDWARN);
|
xfs_quota_warn(mp, dqp, QUOTA_NL_BHARDWARN);
|
||||||
goto error_return;
|
goto error_return;
|
||||||
}
|
}
|
||||||
if (softlimit > 0ULL &&
|
if (softlimit > 0ULL &&
|
||||||
softlimit <= nblks + *resbcountp) {
|
softlimit < nblks + *resbcountp) {
|
||||||
if ((timer != 0 && get_seconds() > timer) ||
|
if ((timer != 0 && get_seconds() > timer) ||
|
||||||
(warns != 0 && warns >= warnlimit)) {
|
(warns != 0 && warns >= warnlimit)) {
|
||||||
xfs_quota_warn(mp, dqp,
|
xfs_quota_warn(mp, dqp,
|
||||||
|
|
Loading…
Reference in New Issue