[XFS] Merge a few minor fixes to the quota warning code.
SGI-PV: 938145 SGI-Modid: xfs-linux:xfs-kern:22901a Signed-off-by: Nathan Scott <nathans@sgi.com>
This commit is contained in:
@@ -286,7 +286,9 @@ xfs_qm_adjust_dqlimits(
|
|||||||
* We also return 0 as the values of the timers in Q_GETQUOTA calls, when
|
* We also return 0 as the values of the timers in Q_GETQUOTA calls, when
|
||||||
* enforcement's off.
|
* enforcement's off.
|
||||||
* In contrast, warnings are a little different in that they don't
|
* In contrast, warnings are a little different in that they don't
|
||||||
* 'automatically' get started when limits get exceeded.
|
* 'automatically' get started when limits get exceeded. They do
|
||||||
|
* get reset to zero, however, when we find the count to be under
|
||||||
|
* the soft limit (they are only ever set non-zero via userspace).
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
xfs_qm_adjust_dqtimers(
|
xfs_qm_adjust_dqtimers(
|
||||||
@@ -315,6 +317,8 @@ xfs_qm_adjust_dqtimers(
|
|||||||
INT_GET(d->d_blk_hardlimit, ARCH_CONVERT)))) {
|
INT_GET(d->d_blk_hardlimit, ARCH_CONVERT)))) {
|
||||||
INT_SET(d->d_btimer, ARCH_CONVERT,
|
INT_SET(d->d_btimer, ARCH_CONVERT,
|
||||||
get_seconds() + XFS_QI_BTIMELIMIT(mp));
|
get_seconds() + XFS_QI_BTIMELIMIT(mp));
|
||||||
|
} else {
|
||||||
|
d->d_bwarns = 0;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if ((!d->d_blk_softlimit ||
|
if ((!d->d_blk_softlimit ||
|
||||||
@@ -336,6 +340,8 @@ xfs_qm_adjust_dqtimers(
|
|||||||
INT_GET(d->d_ino_hardlimit, ARCH_CONVERT)))) {
|
INT_GET(d->d_ino_hardlimit, ARCH_CONVERT)))) {
|
||||||
INT_SET(d->d_itimer, ARCH_CONVERT,
|
INT_SET(d->d_itimer, ARCH_CONVERT,
|
||||||
get_seconds() + XFS_QI_ITIMELIMIT(mp));
|
get_seconds() + XFS_QI_ITIMELIMIT(mp));
|
||||||
|
} else {
|
||||||
|
d->d_iwarns = 0;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if ((!d->d_ino_softlimit ||
|
if ((!d->d_ino_softlimit ||
|
||||||
@@ -357,6 +363,8 @@ xfs_qm_adjust_dqtimers(
|
|||||||
INT_GET(d->d_rtb_hardlimit, ARCH_CONVERT)))) {
|
INT_GET(d->d_rtb_hardlimit, ARCH_CONVERT)))) {
|
||||||
INT_SET(d->d_rtbtimer, ARCH_CONVERT,
|
INT_SET(d->d_rtbtimer, ARCH_CONVERT,
|
||||||
get_seconds() + XFS_QI_RTBTIMELIMIT(mp));
|
get_seconds() + XFS_QI_RTBTIMELIMIT(mp));
|
||||||
|
} else {
|
||||||
|
d->d_rtbwarns = 0;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if ((!d->d_rtb_softlimit ||
|
if ((!d->d_rtb_softlimit ||
|
||||||
|
@@ -1550,8 +1550,10 @@ xfs_qm_reset_dqcounts(
|
|||||||
INT_SET(ddq->d_rtbcount, ARCH_CONVERT, 0ULL);
|
INT_SET(ddq->d_rtbcount, ARCH_CONVERT, 0ULL);
|
||||||
INT_SET(ddq->d_btimer, ARCH_CONVERT, (time_t)0);
|
INT_SET(ddq->d_btimer, ARCH_CONVERT, (time_t)0);
|
||||||
INT_SET(ddq->d_itimer, ARCH_CONVERT, (time_t)0);
|
INT_SET(ddq->d_itimer, ARCH_CONVERT, (time_t)0);
|
||||||
|
INT_SET(ddq->d_rtbtimer, ARCH_CONVERT, (time_t)0);
|
||||||
INT_SET(ddq->d_bwarns, ARCH_CONVERT, 0UL);
|
INT_SET(ddq->d_bwarns, ARCH_CONVERT, 0UL);
|
||||||
INT_SET(ddq->d_iwarns, ARCH_CONVERT, 0UL);
|
INT_SET(ddq->d_iwarns, ARCH_CONVERT, 0UL);
|
||||||
|
INT_SET(ddq->d_rtbwarns, ARCH_CONVERT, 0UL);
|
||||||
ddq = (xfs_disk_dquot_t *) ((xfs_dqblk_t *)ddq + 1);
|
ddq = (xfs_disk_dquot_t *) ((xfs_dqblk_t *)ddq + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -617,7 +617,8 @@ xfs_qm_scall_setqlim(
|
|||||||
if (!capable(CAP_SYS_ADMIN))
|
if (!capable(CAP_SYS_ADMIN))
|
||||||
return XFS_ERROR(EPERM);
|
return XFS_ERROR(EPERM);
|
||||||
|
|
||||||
if ((newlim->d_fieldmask & (FS_DQ_LIMIT_MASK|FS_DQ_TIMER_MASK)) == 0)
|
if ((newlim->d_fieldmask &
|
||||||
|
(FS_DQ_LIMIT_MASK|FS_DQ_TIMER_MASK|FS_DQ_WARNS_MASK)) == 0)
|
||||||
return (0);
|
return (0);
|
||||||
|
|
||||||
tp = xfs_trans_alloc(mp, XFS_TRANS_QM_SETQLIM);
|
tp = xfs_trans_alloc(mp, XFS_TRANS_QM_SETQLIM);
|
||||||
@@ -702,12 +703,23 @@ xfs_qm_scall_setqlim(
|
|||||||
qdprintk("ihard %Ld < isoft %Ld\n", hard, soft);
|
qdprintk("ihard %Ld < isoft %Ld\n", hard, soft);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Update warnings counter(s) if requested
|
||||||
|
*/
|
||||||
|
if (newlim->d_fieldmask & FS_DQ_BWARNS)
|
||||||
|
INT_SET(ddq->d_bwarns, ARCH_CONVERT, newlim->d_bwarns);
|
||||||
|
if (newlim->d_fieldmask & FS_DQ_IWARNS)
|
||||||
|
INT_SET(ddq->d_iwarns, ARCH_CONVERT, newlim->d_iwarns);
|
||||||
|
if (newlim->d_fieldmask & FS_DQ_RTBWARNS)
|
||||||
|
INT_SET(ddq->d_rtbwarns, ARCH_CONVERT, newlim->d_rtbwarns);
|
||||||
|
|
||||||
if (id == 0) {
|
if (id == 0) {
|
||||||
/*
|
/*
|
||||||
* Timelimits for the super user set the relative time
|
* Timelimits for the super user set the relative time
|
||||||
* the other users can be over quota for this file system.
|
* the other users can be over quota for this file system.
|
||||||
* If it is zero a default is used. Ditto for the default
|
* If it is zero a default is used. Ditto for the default
|
||||||
* soft and hard limit values (already done, above).
|
* soft and hard limit values (already done, above), and
|
||||||
|
* for warnings.
|
||||||
*/
|
*/
|
||||||
if (newlim->d_fieldmask & FS_DQ_BTIMER) {
|
if (newlim->d_fieldmask & FS_DQ_BTIMER) {
|
||||||
mp->m_quotainfo->qi_btimelimit = newlim->d_btimer;
|
mp->m_quotainfo->qi_btimelimit = newlim->d_btimer;
|
||||||
@@ -721,7 +733,13 @@ xfs_qm_scall_setqlim(
|
|||||||
mp->m_quotainfo->qi_rtbtimelimit = newlim->d_rtbtimer;
|
mp->m_quotainfo->qi_rtbtimelimit = newlim->d_rtbtimer;
|
||||||
INT_SET(ddq->d_rtbtimer, ARCH_CONVERT, newlim->d_rtbtimer);
|
INT_SET(ddq->d_rtbtimer, ARCH_CONVERT, newlim->d_rtbtimer);
|
||||||
}
|
}
|
||||||
} else /* if (XFS_IS_QUOTA_ENFORCED(mp)) */ {
|
if (newlim->d_fieldmask & FS_DQ_BWARNS)
|
||||||
|
mp->m_quotainfo->qi_bwarnlimit = newlim->d_bwarns;
|
||||||
|
if (newlim->d_fieldmask & FS_DQ_IWARNS)
|
||||||
|
mp->m_quotainfo->qi_iwarnlimit = newlim->d_iwarns;
|
||||||
|
if (newlim->d_fieldmask & FS_DQ_RTBWARNS)
|
||||||
|
mp->m_quotainfo->qi_rtbwarnlimit = newlim->d_rtbwarns;
|
||||||
|
} else {
|
||||||
/*
|
/*
|
||||||
* If the user is now over quota, start the timelimit.
|
* If the user is now over quota, start the timelimit.
|
||||||
* The user will not be 'warned'.
|
* The user will not be 'warned'.
|
||||||
|
Reference in New Issue
Block a user