xfs: refactor quota expiration timer modification
Define explicit limits on the range of quota grace period expiration timeouts and refactor the code that modifies the timeouts into helpers that clamp the values appropriately. Note that we'll refactor the default grace period timer separately. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Allison Collins <allison.henderson@oracle.com> Reviewed-by: Dave Chinner <dchinner@redhat.com>
This commit is contained in:
@@ -98,12 +98,25 @@ xfs_qm_adjust_dqlimits(
|
||||
xfs_dquot_set_prealloc_limits(dq);
|
||||
}
|
||||
|
||||
/* Set the expiration time of a quota's grace period. */
|
||||
time64_t
|
||||
xfs_dquot_set_timeout(
|
||||
struct xfs_mount *mp,
|
||||
time64_t timeout)
|
||||
{
|
||||
struct xfs_quotainfo *qi = mp->m_quotainfo;
|
||||
|
||||
return clamp_t(time64_t, timeout, qi->qi_expiry_min,
|
||||
qi->qi_expiry_max);
|
||||
}
|
||||
|
||||
/*
|
||||
* Determine if this quota counter is over either limit and set the quota
|
||||
* timers as appropriate.
|
||||
*/
|
||||
static inline void
|
||||
xfs_qm_adjust_res_timer(
|
||||
struct xfs_mount *mp,
|
||||
struct xfs_dquot_res *res,
|
||||
struct xfs_quota_limits *qlim)
|
||||
{
|
||||
@@ -112,7 +125,8 @@ xfs_qm_adjust_res_timer(
|
||||
if ((res->softlimit && res->count > res->softlimit) ||
|
||||
(res->hardlimit && res->count > res->hardlimit)) {
|
||||
if (res->timer == 0)
|
||||
res->timer = ktime_get_real_seconds() + qlim->time;
|
||||
res->timer = xfs_dquot_set_timeout(mp,
|
||||
ktime_get_real_seconds() + qlim->time);
|
||||
} else {
|
||||
if (res->timer == 0)
|
||||
res->warnings = 0;
|
||||
@@ -145,9 +159,9 @@ xfs_qm_adjust_dqtimers(
|
||||
ASSERT(dq->q_id);
|
||||
defq = xfs_get_defquota(qi, xfs_dquot_type(dq));
|
||||
|
||||
xfs_qm_adjust_res_timer(&dq->q_blk, &defq->blk);
|
||||
xfs_qm_adjust_res_timer(&dq->q_ino, &defq->ino);
|
||||
xfs_qm_adjust_res_timer(&dq->q_rtb, &defq->rtb);
|
||||
xfs_qm_adjust_res_timer(dq->q_mount, &dq->q_blk, &defq->blk);
|
||||
xfs_qm_adjust_res_timer(dq->q_mount, &dq->q_ino, &defq->ino);
|
||||
xfs_qm_adjust_res_timer(dq->q_mount, &dq->q_rtb, &defq->rtb);
|
||||
}
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user