lib/iscsi: Make iscsi subsystem init in an asynchronous way
Prepared for adding spdk iscsi poll group. Change-Id: I8cca51fcf6ca0d51982b8f28d52c4d102ce1fd73 Signed-off-by: Ziye Yang <optimistyzy@gmail.com> Reviewed-on: https://review.gerrithub.io/400903 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
This commit is contained in:
parent
59d901ad72
commit
a2c6b71614
@ -37,14 +37,16 @@
|
||||
|
||||
#include "spdk_internal/event.h"
|
||||
|
||||
static void
|
||||
spdk_iscsi_subsystem_init_complete(void *cb_arg, int rc)
|
||||
{
|
||||
spdk_subsystem_init_next(rc);
|
||||
}
|
||||
|
||||
static void
|
||||
spdk_iscsi_subsystem_init(void)
|
||||
{
|
||||
int rc;
|
||||
|
||||
rc = spdk_iscsi_init();
|
||||
|
||||
spdk_subsystem_init_next(rc);
|
||||
spdk_iscsi_init(spdk_iscsi_subsystem_init_complete, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -317,7 +317,9 @@ extern struct spdk_iscsi_globals g_spdk_iscsi;
|
||||
|
||||
struct spdk_iscsi_task;
|
||||
|
||||
int spdk_iscsi_init(void);
|
||||
typedef void (*spdk_iscsi_init_cb)(void *cb_arg, int rc);
|
||||
|
||||
void spdk_iscsi_init(spdk_iscsi_init_cb cb_fn, void *cb_arg);
|
||||
typedef void (*spdk_iscsi_fini_cb)(void *arg);
|
||||
void spdk_iscsi_fini(spdk_iscsi_fini_cb cb_fn, void *cb_arg);
|
||||
void spdk_iscsi_fini_done(void);
|
||||
|
@ -45,6 +45,9 @@
|
||||
#include "spdk_internal/event.h"
|
||||
#include "spdk_internal/log.h"
|
||||
|
||||
static spdk_iscsi_init_cb g_init_cb_fn = NULL;
|
||||
static void *g_init_cb_arg = NULL;
|
||||
|
||||
static spdk_iscsi_fini_cb g_fini_cb_fn;
|
||||
static void *g_fini_cb_arg;
|
||||
|
||||
@ -815,36 +818,57 @@ spdk_iscsi_app_read_parameters(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
spdk_iscsi_init(void)
|
||||
|
||||
static void
|
||||
spdk_iscsi_init_complete(int rc)
|
||||
{
|
||||
spdk_iscsi_init_cb cb_fn = g_init_cb_fn;
|
||||
void *cb_arg = g_init_cb_arg;
|
||||
|
||||
g_init_cb_fn = NULL;
|
||||
g_init_cb_arg = NULL;
|
||||
|
||||
cb_fn(cb_arg, rc);
|
||||
}
|
||||
|
||||
void
|
||||
spdk_iscsi_init(spdk_iscsi_init_cb cb_fn, void *cb_arg)
|
||||
{
|
||||
int rc;
|
||||
|
||||
assert(cb_fn != NULL);
|
||||
g_init_cb_fn = cb_fn;
|
||||
g_init_cb_arg = cb_arg;
|
||||
|
||||
rc = spdk_iscsi_app_read_parameters();
|
||||
if (rc < 0) {
|
||||
SPDK_ERRLOG("spdk_iscsi_app_read_parameters() failed\n");
|
||||
return -1;
|
||||
spdk_iscsi_init_complete(-1);
|
||||
return;
|
||||
}
|
||||
|
||||
rc = spdk_iscsi_initialize_all_pools();
|
||||
if (rc != 0) {
|
||||
SPDK_ERRLOG("spdk_initialize_all_pools() failed\n");
|
||||
return -1;
|
||||
spdk_iscsi_init_complete(-1);
|
||||
return;
|
||||
}
|
||||
|
||||
rc = spdk_iscsi_init_tgt_nodes();
|
||||
if (rc < 0) {
|
||||
SPDK_ERRLOG("spdk_iscsi_init_tgt_nodes() failed\n");
|
||||
return -1;
|
||||
spdk_iscsi_init_complete(-1);
|
||||
return;
|
||||
}
|
||||
|
||||
rc = spdk_initialize_iscsi_conns();
|
||||
if (rc < 0) {
|
||||
SPDK_ERRLOG("spdk_initialize_iscsi_conns() failed\n");
|
||||
return -1;
|
||||
spdk_iscsi_init_complete(-1);
|
||||
return;
|
||||
}
|
||||
|
||||
return 0;
|
||||
spdk_iscsi_init_complete(0);
|
||||
}
|
||||
|
||||
void
|
||||
|
Loading…
Reference in New Issue
Block a user