Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 20f12d8a authored by Mitsuo Hayasaka's avatar Mitsuo Hayasaka Committed by Ben Myers
Browse files

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: default avatarMitsuo 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: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarMark Tinguely <tinguely@sgi.com>
Signed-off-by: default avatarBen Myers <bpm@sgi.com>
parent 05293485
Loading
Loading
Loading
Loading
+12 −12
Original line number Original line Diff line number Diff line
@@ -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;
		}
		}
+3 −3
Original line number Original line Diff line number Diff line
@@ -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)
+2 −2
Original line number Original line Diff line number Diff line
@@ -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);
		}
		}
+2 −2
Original line number Original line Diff line number Diff line
@@ -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,