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.