Commit 9937ba0b authored by Shuhei Matsumoto's avatar Shuhei Matsumoto Committed by Tomasz Zawadzki
Browse files

bdev/nvme: Fix the RPC bdev_nvme_send_cmd to pass the registered io_device,...


bdev/nvme: Fix the RPC bdev_nvme_send_cmd to pass the registered io_device, nvme_bdev_ctrlr, correctly to get io_channel

Previously, not nvme_bdev_ctrlr but spdk_nvme_ctrlr pointer had been
passed to spdk_get_io_channel() in nvme_rpc_io_cmd_bdev_nvme().

There was no unit test for bdev_nvme_get_io_qpair(), and so add
unit test for it to guard us from degradation.

Signed-off-by: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Change-Id: I00fdc14ea6467162c5fb90d04389883d7c409a17
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/6920


Community-CI: Broadcom CI
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@mellanox.com>
parent 05f8643e
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -209,6 +209,8 @@ bdev_nvme_get_io_qpair(struct spdk_io_channel *ctrlr_io_ch)
{
	struct nvme_io_channel *nvme_ch;

	assert(ctrlr_io_ch != NULL);

	nvme_ch = spdk_io_channel_get_ctx(ctrlr_io_ch);

	return nvme_ch->qpair;
+1 −1
Original line number Diff line number Diff line
@@ -190,7 +190,7 @@ nvme_rpc_io_cmd_bdev_nvme(struct rpc_bdev_nvme_send_cmd_ctx *ctx, struct spdk_nv
	struct spdk_nvme_qpair *io_qpair;
	int ret;

	ctx->ctrlr_io_ch = spdk_get_io_channel(_nvme_ctrlr->ctrlr);
	ctx->ctrlr_io_ch = spdk_get_io_channel(_nvme_ctrlr);
	io_qpair = bdev_nvme_get_io_qpair(ctx->ctrlr_io_ch);

	ret = spdk_nvme_ctrlr_cmd_io_raw_with_md(_nvme_ctrlr->ctrlr, io_qpair,
+39 −0
Original line number Diff line number Diff line
@@ -1989,6 +1989,44 @@ test_abort(void)
	ut_detach_ctrlr(ctrlr);
}

static void
test_get_io_qpair(void)
{
	struct spdk_nvme_transport_id trid = {};
	struct spdk_nvme_ctrlr ctrlr = {};
	struct nvme_bdev_ctrlr *nvme_bdev_ctrlr = NULL;
	struct spdk_io_channel *ch;
	struct nvme_io_channel *nvme_ch;
	struct spdk_nvme_qpair *qpair;
	int rc;

	ut_init_trid(&trid);
	TAILQ_INIT(&ctrlr.active_io_qpairs);

	set_thread(0);

	rc = nvme_bdev_ctrlr_create(&ctrlr, "nvme0", &trid, 0, &nvme_bdev_ctrlr);
	CU_ASSERT(rc == 0);
	SPDK_CU_ASSERT_FATAL(nvme_bdev_ctrlr != NULL);

	ch = spdk_get_io_channel(nvme_bdev_ctrlr);
	SPDK_CU_ASSERT_FATAL(ch != NULL);
	nvme_ch = spdk_io_channel_get_ctx(ch);
	CU_ASSERT(nvme_ch->qpair != NULL);

	qpair = bdev_nvme_get_io_qpair(ch);
	CU_ASSERT(qpair == nvme_ch->qpair);

	spdk_put_io_channel(ch);

	rc = bdev_nvme_delete("nvme0", NULL);
	CU_ASSERT(rc == 0);

	poll_threads();

	CU_ASSERT(nvme_bdev_ctrlr_get_by_name("nvme0") == NULL);
}

int
main(int argc, const char **argv)
{
@@ -2011,6 +2049,7 @@ main(int argc, const char **argv)
	CU_ADD_TEST(suite, test_submit_nvme_cmd);
	CU_ADD_TEST(suite, test_remove_trid);
	CU_ADD_TEST(suite, test_abort);
	CU_ADD_TEST(suite, test_get_io_qpair);

	CU_basic_set_mode(CU_BRM_VERBOSE);