nvmf/fc: free g_nvmf_ftransport after nvmf_fc_lld_fini is complete.
Dont free g_nvmf_ftransport before LLD finishes its cleanup. Signed-off-by: Naresh Gottumukkala <raju.gottumukkala@broadcom.com> Change-Id: I61693fbe1afe0b4f6b52828d3149175419457487 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/5963 Community-CI: Broadcom CI Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
d0657f3230
commit
2f48218a11
@ -236,6 +236,8 @@ struct spdk_nvmf_fc_transport {
|
|||||||
|
|
||||||
static struct spdk_nvmf_fc_transport *g_nvmf_ftransport;
|
static struct spdk_nvmf_fc_transport *g_nvmf_ftransport;
|
||||||
|
|
||||||
|
static spdk_nvmf_transport_destroy_done_cb g_transport_destroy_done_cb = NULL;
|
||||||
|
|
||||||
static TAILQ_HEAD(, spdk_nvmf_fc_port) g_spdk_nvmf_fc_port_list =
|
static TAILQ_HEAD(, spdk_nvmf_fc_port) g_spdk_nvmf_fc_port_list =
|
||||||
TAILQ_HEAD_INITIALIZER(g_spdk_nvmf_fc_port_list);
|
TAILQ_HEAD_INITIALIZER(g_spdk_nvmf_fc_port_list);
|
||||||
|
|
||||||
@ -2011,27 +2013,33 @@ nvmf_fc_create(struct spdk_nvmf_transport_opts *opts)
|
|||||||
return &g_nvmf_ftransport->transport;
|
return &g_nvmf_ftransport->transport;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
nvmf_fc_destroy_done_cb(void *cb_arg)
|
||||||
|
{
|
||||||
|
free(g_nvmf_ftransport);
|
||||||
|
if (g_transport_destroy_done_cb) {
|
||||||
|
g_transport_destroy_done_cb(cb_arg);
|
||||||
|
g_transport_destroy_done_cb = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
nvmf_fc_destroy(struct spdk_nvmf_transport *transport,
|
nvmf_fc_destroy(struct spdk_nvmf_transport *transport,
|
||||||
spdk_nvmf_transport_destroy_done_cb cb_fn, void *cb_arg)
|
spdk_nvmf_transport_destroy_done_cb cb_fn, void *cb_arg)
|
||||||
{
|
{
|
||||||
if (transport) {
|
if (transport) {
|
||||||
struct spdk_nvmf_fc_transport *ftransport;
|
|
||||||
struct spdk_nvmf_fc_poll_group *fgroup, *pg_tmp;
|
struct spdk_nvmf_fc_poll_group *fgroup, *pg_tmp;
|
||||||
|
|
||||||
ftransport = SPDK_CONTAINEROF(transport, struct spdk_nvmf_fc_transport, transport);
|
|
||||||
|
|
||||||
free(ftransport);
|
|
||||||
|
|
||||||
/* clean up any FC poll groups still around */
|
/* clean up any FC poll groups still around */
|
||||||
TAILQ_FOREACH_SAFE(fgroup, &g_nvmf_fgroups, link, pg_tmp) {
|
TAILQ_FOREACH_SAFE(fgroup, &g_nvmf_fgroups, link, pg_tmp) {
|
||||||
TAILQ_REMOVE(&g_nvmf_fgroups, fgroup, link);
|
TAILQ_REMOVE(&g_nvmf_fgroups, fgroup, link);
|
||||||
free(fgroup);
|
free(fgroup);
|
||||||
}
|
}
|
||||||
g_nvmf_fgroup_count = 0;
|
g_nvmf_fgroup_count = 0;
|
||||||
|
g_transport_destroy_done_cb = cb_fn;
|
||||||
|
|
||||||
/* low level FC driver clean up */
|
/* low level FC driver clean up */
|
||||||
nvmf_fc_lld_fini(cb_fn, cb_arg);
|
nvmf_fc_lld_fini(nvmf_fc_destroy_done_cb, cb_arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user