From 5ee03f63a1a1fa73e7625c72ec85994ead30498d Mon Sep 17 00:00:00 2001 From: Niu Yawei Date: Fri, 21 Jun 2013 04:05:25 -0400 Subject: [PATCH] LU-3460 quota: don't schedule adjust when qsd stopped When the qsd is stopped, we should not schedule quota adjust or index update anymore, because the writeback thread has been stopped, and those scheduled requests will never be processed. Lustre-commit: 76ddf87488010a38a3e7b0b5923e0fe8e725326a Lustre-change: http://review.whamcloud.com/6731 Signed-off-by: Bob Glossman Signed-off-by: Niu Yawei Reviewed-by: Johann Lombardi Reviewed-by: Fan Yong Change-Id: I7c10c79db4176b3af8c7741dd438a2095ddb9bb5 Reviewed-on: http://review.whamcloud.com/8169 Tested-by: Jenkins Tested-by: Maloo --- lustre/quota/qsd_writeback.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/lustre/quota/qsd_writeback.c b/lustre/quota/qsd_writeback.c index fdc1ef5..451c3b4 100644 --- a/lustre/quota/qsd_writeback.c +++ b/lustre/quota/qsd_writeback.c @@ -93,18 +93,27 @@ static void qsd_upd_add(struct qsd_instance *qsd, struct qsd_upd_rec *upd) /* wake up the upd thread */ cfs_waitq_signal(&qsd->qsd_upd_thread.t_ctl_waitq); } else { - CWARN("%s: discard deferred update.\n", qsd->qsd_svname); + CWARN("%s: discard update.\n", qsd->qsd_svname); if (upd->qur_lqe) - LQUOTA_WARN(upd->qur_lqe, "discard deferred update."); + LQUOTA_WARN(upd->qur_lqe, "discard update."); qsd_upd_free(upd); } } /* must hold the qsd_lock */ -static void qsd_add_deferred(cfs_list_t *list, struct qsd_upd_rec *upd) +static void qsd_add_deferred(struct qsd_instance *qsd, cfs_list_t *list, + struct qsd_upd_rec *upd) { struct qsd_upd_rec *tmp, *n; + if (qsd->qsd_stopping) { + CWARN("%s: discard deferred udpate.\n", qsd->qsd_svname); + if (upd->qur_lqe) + LQUOTA_WARN(upd->qur_lqe, "discard deferred update."); + qsd_upd_free(upd); + return; + } + /* Sort the updates in ascending order */ cfs_list_for_each_entry_safe_reverse(tmp, n, list, qur_link) { @@ -261,7 +270,7 @@ void qsd_upd_schedule(struct qsd_qtype_info *qqi, struct lquota_entry *lqe, * the reintegration is in progress. Defer the update. */ cfs_list_t *list = global ? &qqi->qqi_deferred_glb : &qqi->qqi_deferred_slv; - qsd_add_deferred(list, upd); + qsd_add_deferred(qsd, list, upd); } write_unlock(&qsd->qsd_lock); @@ -311,6 +320,13 @@ void qsd_adjust_schedule(struct lquota_entry *lqe, bool defer, bool cancel) struct qsd_instance *qsd = lqe2qqi(lqe)->qqi_qsd; bool added = false; + read_lock(&qsd->qsd_lock); + if (qsd->qsd_stopping) { + read_unlock(&qsd->qsd_lock); + return; + } + read_unlock(&qsd->qsd_lock); + lqe_getref(lqe); spin_lock(&qsd->qsd_adjust_lock); -- 1.8.3.1