Whamcloud - gitweb
LU-13116 mgc: do not lose sptlrpc config lock
[fs/lustre-release.git] / lustre / mgc / mgc_request.c
index b042c7f..f827fba 100644 (file)
@@ -156,8 +156,10 @@ static void config_log_put(struct config_llog_data *cld)
                config_log_put(cld->cld_params);
                config_log_put(cld->cld_nodemap);
                config_log_put(cld->cld_sptlrpc);
-               if (cld_is_sptlrpc(cld))
+               if (cld_is_sptlrpc(cld)) {
+                       cld->cld_stopping = 1;
                        sptlrpc_conf_log_stop(cld->cld_logname);
+               }
 
                class_export_put(cld->cld_mgcexp);
                OBD_FREE(cld, sizeof(*cld) + strlen(cld->cld_logname) + 1);
@@ -519,16 +521,17 @@ static int config_log_end(char *logname, struct config_llog_instance *cfg)
        mutex_unlock(&cld->cld_lock);
 
        config_mark_cld_stop(cld_recover);
+       config_log_put(cld_recover);
        config_mark_cld_stop(cld_params);
-       config_mark_cld_stop(cld_barrier);
-       config_mark_cld_stop(cld_sptlrpc);
-
        config_log_put(cld_params);
-       config_log_put(cld_recover);
-       /* don't set cld_stopping on nm lock as other targets may be active */
-       config_log_put(cld_nodemap);
+       config_mark_cld_stop(cld_barrier);
        config_log_put(cld_barrier);
+       /* don't explicitly set cld_stopping on sptlrpc lock here, as other
+        * targets may be active, it will be done in config_log_put if necessary
+        */
        config_log_put(cld_sptlrpc);
+       /* don't set cld_stopping on nm lock as other targets may be active */
+       config_log_put(cld_nodemap);
 
        /* drop the ref from the find */
        config_log_put(cld);