iscsi: track whether io_device needs to be unregistered
If iscsi initialization fails (due to a memory allocation failure for example), we may not even get to the point where the g_iscsi global is registered as an io_device. So then when we tear down the iscsi library using spdk_iscsi_fini(), we need to make sure we don't try to unregister g_iscsi if it wasn't registered. For now, just use the g_init_thread global to make this determination - it's set just after we register the io_device. Signed-off-by: Jim Harris <james.r.harris@intel.com> Change-Id: Ic9443564ef67b9c0df0fce47a346f4608749c306 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/8351 Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Paul Luse <paul.e.luse@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-by: Ziye Yang <ziye.yang@intel.com> Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com>
This commit is contained in:
parent
b4af31de92
commit
d5af6a0417
@ -1155,10 +1155,6 @@ spdk_iscsi_fini(spdk_iscsi_fini_cb cb_fn, void *cb_arg)
|
|||||||
static void
|
static void
|
||||||
iscsi_fini_done(void *io_device)
|
iscsi_fini_done(void *io_device)
|
||||||
{
|
{
|
||||||
free(g_iscsi.authfile);
|
|
||||||
free(g_iscsi.nodebase);
|
|
||||||
|
|
||||||
pthread_mutex_destroy(&g_iscsi.mutex);
|
|
||||||
g_fini_cb_fn(g_fini_cb_arg);
|
g_fini_cb_fn(g_fini_cb_arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1176,7 +1172,20 @@ _iscsi_fini_dev_unreg(struct spdk_io_channel_iter *i, int status)
|
|||||||
iscsi_portal_grps_destroy();
|
iscsi_portal_grps_destroy();
|
||||||
iscsi_auth_groups_destroy();
|
iscsi_auth_groups_destroy();
|
||||||
|
|
||||||
spdk_io_device_unregister(&g_iscsi, iscsi_fini_done);
|
free(g_iscsi.authfile);
|
||||||
|
free(g_iscsi.nodebase);
|
||||||
|
|
||||||
|
pthread_mutex_destroy(&g_iscsi.mutex);
|
||||||
|
if (g_init_thread != NULL) {
|
||||||
|
/* g_init_thread is set just after the io_device is
|
||||||
|
* registered, so we can use it to determine if it
|
||||||
|
* needs to be unregistered (in cases where iscsi init
|
||||||
|
* fails).
|
||||||
|
*/
|
||||||
|
spdk_io_device_unregister(&g_iscsi, iscsi_fini_done);
|
||||||
|
} else {
|
||||||
|
iscsi_fini_done(NULL);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
Loading…
Reference in New Issue
Block a user