lib/iscsi: Make iscsi_shutdown_tgt_node_by_name asynchronous
This patch changes spdk_rpc_delete_target_node() to pass rpc_delete_target_node_done() and its context to spdk_iscsi_shutdown_tgt_node_by_name(). iscsi_tgt_node_destruct() is not asynchronized yet and so spdk_iscsi_shutdown_tgt_node_by_name() calls the callback passed from the caller directly for now. The next patch will replace the call. Change-Id: Ide2d9fcc6738e02de19f91249c21ac2d0d37138a Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/450605 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
This commit is contained in:
parent
e057bb8581
commit
787b5efe02
@ -704,12 +704,8 @@ spdk_rpc_delete_target_node(struct spdk_jsonrpc_request *request,
|
||||
|
||||
ctx->request = request;
|
||||
|
||||
if (spdk_iscsi_shutdown_tgt_node_by_name(ctx->req.name)) {
|
||||
SPDK_ERRLOG("shutdown_tgt_node_by_name failed\n");
|
||||
goto invalid;
|
||||
}
|
||||
|
||||
rpc_delete_target_node_done(ctx, 0);
|
||||
spdk_iscsi_shutdown_tgt_node_by_name(ctx->req.name,
|
||||
rpc_delete_target_node_done, ctx);
|
||||
return;
|
||||
|
||||
invalid:
|
||||
|
@ -1284,8 +1284,9 @@ spdk_iscsi_shutdown_tgt_nodes(void)
|
||||
pthread_mutex_unlock(&g_spdk_iscsi.mutex);
|
||||
}
|
||||
|
||||
int
|
||||
spdk_iscsi_shutdown_tgt_node_by_name(const char *target_name)
|
||||
void
|
||||
spdk_iscsi_shutdown_tgt_node_by_name(const char *target_name,
|
||||
iscsi_tgt_node_destruct_cb cb_fn, void *cb_arg)
|
||||
{
|
||||
struct spdk_iscsi_tgt_node *target;
|
||||
|
||||
@ -1297,11 +1298,16 @@ spdk_iscsi_shutdown_tgt_node_by_name(const char *target_name)
|
||||
|
||||
iscsi_tgt_node_destruct(target);
|
||||
|
||||
return 0;
|
||||
if (cb_fn) {
|
||||
cb_fn(cb_arg, 0);
|
||||
}
|
||||
return;
|
||||
}
|
||||
pthread_mutex_unlock(&g_spdk_iscsi.mutex);
|
||||
|
||||
return -ENOENT;
|
||||
if (cb_fn) {
|
||||
cb_fn(cb_arg, -ENOENT);
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
|
@ -48,6 +48,8 @@ struct spdk_json_write_ctx;
|
||||
#define MAX_TARGET_MAP 256
|
||||
#define SPDK_TN_TAG_MAX 0x0000ffff
|
||||
|
||||
typedef void (*iscsi_tgt_node_destruct_cb)(void *cb_arg, int rc);
|
||||
|
||||
struct spdk_iscsi_ig_map {
|
||||
struct spdk_iscsi_init_grp *ig;
|
||||
TAILQ_ENTRY(spdk_iscsi_ig_map) tailq;
|
||||
@ -94,7 +96,8 @@ struct spdk_iscsi_tgt_node {
|
||||
int spdk_iscsi_parse_tgt_nodes(void);
|
||||
|
||||
void spdk_iscsi_shutdown_tgt_nodes(void);
|
||||
int spdk_iscsi_shutdown_tgt_node_by_name(const char *target_name);
|
||||
void spdk_iscsi_shutdown_tgt_node_by_name(const char *target_name,
|
||||
iscsi_tgt_node_destruct_cb cb_fn, void *cb_arg);
|
||||
bool spdk_iscsi_tgt_node_is_destructed(struct spdk_iscsi_tgt_node *target);
|
||||
int spdk_iscsi_send_tgts(struct spdk_iscsi_conn *conn, const char *iiqn,
|
||||
const char *iaddr, const char *tiqn, uint8_t *data, int alloc_len,
|
||||
|
Loading…
Reference in New Issue
Block a user