From 14feab48582f2e5723224a20bd95ee126ff467c5 Mon Sep 17 00:00:00 2001 From: Andriy Skulysh Date: Tue, 17 Apr 2018 14:57:07 +0300 Subject: [PATCH] LU-11090 quota: Oops in qsd_config It's quota config vs umount race Remove qsd from the list of fsinfo before freeing per-quota type data. Change-Id: Ib7c3a94b3222ffd229da1a384113b3befc19665b Cray-bug-id: LUS-5896 Signed-off-by: Andriy Skulysh Reviewed-on: https://review.whamcloud.com/32715 Tested-by: Jenkins Tested-by: Maloo Reviewed-by: Alexandr Boyko Reviewed-by: Alexander Zarochentsev Reviewed-by: Vitaly Fertman Reviewed-by: Oleg Drokin --- lustre/quota/qsd_lib.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/lustre/quota/qsd_lib.c b/lustre/quota/qsd_lib.c index f2c460a..1adc22d 100644 --- a/lustre/quota/qsd_lib.c +++ b/lustre/quota/qsd_lib.c @@ -589,14 +589,6 @@ void qsd_fini(const struct lu_env *env, struct qsd_instance *qsd) qsd->qsd_ns = NULL; } - /* free per-quota type data */ - for (qtype = USRQUOTA; qtype < LL_MAXQUOTAS; qtype++) - qsd_qtype_fini(env, qsd, qtype); - - /* deregister connection to the quota master */ - qsd->qsd_exp_valid = false; - lustre_deregister_lwp_item(&qsd->qsd_exp); - /* release per-filesystem information */ if (qsd->qsd_fsinfo != NULL) { mutex_lock(&qsd->qsd_fsinfo->qfs_mutex); @@ -607,6 +599,14 @@ void qsd_fini(const struct lu_env *env, struct qsd_instance *qsd) qsd->qsd_fsinfo = NULL; } + /* free per-quota type data */ + for (qtype = USRQUOTA; qtype < LL_MAXQUOTAS; qtype++) + qsd_qtype_fini(env, qsd, qtype); + + /* deregister connection to the quota master */ + qsd->qsd_exp_valid = false; + lustre_deregister_lwp_item(&qsd->qsd_exp); + /* release quota root directory */ if (qsd->qsd_root != NULL) { dt_object_put(env, qsd->qsd_root); -- 1.8.3.1