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: Shuhei 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: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Changpeng Liu <changpeng.liu@intel.com> Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com>
This commit is contained in:
parent
05f8643e15
commit
9937ba0b5f
@ -209,7 +209,9 @@ bdev_nvme_get_io_qpair(struct spdk_io_channel *ctrlr_io_ch)
|
|||||||
{
|
{
|
||||||
struct nvme_io_channel *nvme_ch;
|
struct nvme_io_channel *nvme_ch;
|
||||||
|
|
||||||
nvme_ch = spdk_io_channel_get_ctx(ctrlr_io_ch);
|
assert(ctrlr_io_ch != NULL);
|
||||||
|
|
||||||
|
nvme_ch = spdk_io_channel_get_ctx(ctrlr_io_ch);
|
||||||
|
|
||||||
return nvme_ch->qpair;
|
return nvme_ch->qpair;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
struct spdk_nvme_qpair *io_qpair;
|
||||||
int ret;
|
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);
|
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,
|
ret = spdk_nvme_ctrlr_cmd_io_raw_with_md(_nvme_ctrlr->ctrlr, io_qpair,
|
||||||
|
@ -1989,6 +1989,44 @@ test_abort(void)
|
|||||||
ut_detach_ctrlr(ctrlr);
|
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
|
int
|
||||||
main(int argc, const char **argv)
|
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_submit_nvme_cmd);
|
||||||
CU_ADD_TEST(suite, test_remove_trid);
|
CU_ADD_TEST(suite, test_remove_trid);
|
||||||
CU_ADD_TEST(suite, test_abort);
|
CU_ADD_TEST(suite, test_abort);
|
||||||
|
CU_ADD_TEST(suite, test_get_io_qpair);
|
||||||
|
|
||||||
CU_basic_set_mode(CU_BRM_VERBOSE);
|
CU_basic_set_mode(CU_BRM_VERBOSE);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user