The revoke time of the lquota entry should be set when its qunit
reaches least qunit, but it could not be set in some rare case,
which could be related to the broken quota LDLM lock, set it in
"qmt_acquire" to avoid endless wait in QSD.
Signed-off-by: Hongchao Zhang <hongchao@whamcloud.com>
Change-Id: Ib68c5dc881346e0e619d43553ee490847ae5e225
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/50626
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
Reviewed-by: Sergey Cheremencev <scherementsev@ddn.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
RETURN(false);
/* least qunit value not sent to all slaves yet */
- if (lqe->lqe_revoke_time == 0)
+ if (lqe->lqe_revoke_time == 0 &&
+ !lqe->lqe_gl && list_empty(&lqe->lqe_link)) {
+ /* LU-16736: the revoke_time should be set when
+ * the qunit reachs the least qunit, the quota
+ * LDLM lock could encounter some issue, setting
+ * it to avoid endless wait in QSD. */
+ LQUOTA_ERROR(lqe, "set revoke_time explicitly");
+
+ lqe->lqe_revoke_time = ktime_get_seconds();
RETURN(false);
+ }
/* Let's give more time to slave to release space */
lapse = ktime_get_seconds() - QMT_REBA_TIMEOUT;