Commit 787b5efe authored by Shuhei Matsumoto's avatar Shuhei Matsumoto Committed by Jim Harris
Browse files

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: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/450605


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
parent e057bb85
Loading
Loading
Loading
Loading
+2 −6
Original line number Diff line number Diff line
@@ -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:
+10 −4
Original line number Diff line number Diff line
@@ -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
+4 −1
Original line number Diff line number Diff line
@@ -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,