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;
|
ctx->request = request;
|
||||||
|
|
||||||
if (spdk_iscsi_shutdown_tgt_node_by_name(ctx->req.name)) {
|
spdk_iscsi_shutdown_tgt_node_by_name(ctx->req.name,
|
||||||
SPDK_ERRLOG("shutdown_tgt_node_by_name failed\n");
|
rpc_delete_target_node_done, ctx);
|
||||||
goto invalid;
|
|
||||||
}
|
|
||||||
|
|
||||||
rpc_delete_target_node_done(ctx, 0);
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
invalid:
|
invalid:
|
||||||
|
@ -1284,8 +1284,9 @@ spdk_iscsi_shutdown_tgt_nodes(void)
|
|||||||
pthread_mutex_unlock(&g_spdk_iscsi.mutex);
|
pthread_mutex_unlock(&g_spdk_iscsi.mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
void
|
||||||
spdk_iscsi_shutdown_tgt_node_by_name(const char *target_name)
|
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;
|
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);
|
iscsi_tgt_node_destruct(target);
|
||||||
|
|
||||||
return 0;
|
if (cb_fn) {
|
||||||
|
cb_fn(cb_arg, 0);
|
||||||
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
pthread_mutex_unlock(&g_spdk_iscsi.mutex);
|
pthread_mutex_unlock(&g_spdk_iscsi.mutex);
|
||||||
|
|
||||||
return -ENOENT;
|
if (cb_fn) {
|
||||||
|
cb_fn(cb_arg, -ENOENT);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
@ -48,6 +48,8 @@ struct spdk_json_write_ctx;
|
|||||||
#define MAX_TARGET_MAP 256
|
#define MAX_TARGET_MAP 256
|
||||||
#define SPDK_TN_TAG_MAX 0x0000ffff
|
#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_ig_map {
|
||||||
struct spdk_iscsi_init_grp *ig;
|
struct spdk_iscsi_init_grp *ig;
|
||||||
TAILQ_ENTRY(spdk_iscsi_ig_map) tailq;
|
TAILQ_ENTRY(spdk_iscsi_ig_map) tailq;
|
||||||
@ -94,7 +96,8 @@ struct spdk_iscsi_tgt_node {
|
|||||||
int spdk_iscsi_parse_tgt_nodes(void);
|
int spdk_iscsi_parse_tgt_nodes(void);
|
||||||
|
|
||||||
void spdk_iscsi_shutdown_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);
|
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,
|
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,
|
const char *iaddr, const char *tiqn, uint8_t *data, int alloc_len,
|
||||||
|
Loading…
Reference in New Issue
Block a user