From: Oleg Drokin Date: Thu, 4 Oct 2012 23:13:14 +0000 (-0400) Subject: LU-2092 Free quota pools before removing quota master proc entry X-Git-Tag: 2.3.53~28 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=8483a7d0f6518a3cdf513489d23d9caf1a31347d LU-2092 Free quota pools before removing quota master proc entry When quota master proc entry is removed, it reqursively removes all children entries including quota pool ones, then when quota pools are freed they try to unregister already not present proc entries and crash/lockup. So free pools before unregistering any proc entires. Change-Id: Ice0be373bacbd54f4863aec92fb2427c7fe27464 Signed-off-by: Oleg Drokin Reviewed-on: http://review.whamcloud.com/4191 Reviewed-by: Johann Lombardi Reviewed-by: wangdi Tested-by: Hudson Tested-by: Maloo --- diff --git a/lustre/quota/qmt_dev.c b/lustre/quota/qmt_dev.c index 701cc16..8512035 100644 --- a/lustre/quota/qmt_dev.c +++ b/lustre/quota/qmt_dev.c @@ -101,15 +101,15 @@ static struct lu_device *qmt_device_fini(const struct lu_env *env, CDEBUG(D_QUOTA, "%s: initiating QMT shutdown\n", qmt->qmt_svname); qmt->qmt_stopping = true; + /* kill pool instances, if any */ + qmt_pool_fini(env, qmt); + /* remove qmt proc entry */ if (qmt->qmt_proc != NULL && !IS_ERR(qmt->qmt_proc)) { lprocfs_remove(&qmt->qmt_proc); qmt->qmt_proc = NULL; } - /* kill pool instances, if any */ - qmt_pool_fini(env, qmt); - /* disconnect from OSD */ if (qmt->qmt_child_exp != NULL) { obd_disconnect(qmt->qmt_child_exp);