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:
Shuhei Matsumoto 2019-04-11 12:51:56 +09:00 committed by Jim Harris
parent e057bb8581
commit 787b5efe02
3 changed files with 16 additions and 11 deletions

View File

@ -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:

View File

@ -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

View File

@ -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,