Details
-
Bug
-
Resolution: Fixed
-
Major
-
Lustre 2.12.0, Lustre 2.10.5
-
None
-
3
-
9223372036854775807
Description
See following assertion:
(lod_lov.c:361:lod_add_device()) lustre-OSTe42a-osc-MDT0000: can't set up pool, failed with -12 10059:0:(osp_dev.c:473:osp_disconnect()) ASSERTION( imp != ((void *)0) ) failed: 10059:0:(osp_dev.c:473:osp_disconnect()) LBUG CPU: 1 PID: 10059 Comm: llog_process_th Kdump: loaded Tainted: G Problem is obd_disconnect() will cleanup @imp and set NULL. |->osp_obd_disconnect |->class_manual_cleanup |->class_process_config |->class_cleanup |->obd_precleanup |->osp_device_fini |->client_obd_cleanup While ldo_process_config() will try to access @imp again: |->ldo_process_config |->osp_shutdown |->osp_disconnect LASSERT(imp != NULL) --->fail here Another problem is if we failed before obd_connect(). we will hang on with mount: |->ldo_process_config |->osp_shutdown |->osp_disconnect |->ptlrpc_disconnect_import |->rc = l_wait_event(imp->imp_recovery_waitq, !ptlrpc_import_in_recovery(imp), &lwi);
Since connect is not called, imp state will keep DISCONN.