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

bdev/nvme: ctrlr_channel has a list of io_path pointers



This patch enables each nvme_ctrlr_channel to access the underlying
nvme_bdev_channels. This change is used to maintain io_path cache
of nvme_bdev_channel.

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


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Community-CI: Mellanox Build Bot
Reviewed-by: default avatarGangCao <gang.cao@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@mellanox.com>
parent f386632d
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -574,9 +574,13 @@ _bdev_nvme_add_io_path(struct nvme_bdev_channel *nbdev_ch, struct nvme_ns *nvme_
	}

	io_path->ctrlr_ch = spdk_io_channel_get_ctx(ch);
	TAILQ_INSERT_TAIL(&io_path->ctrlr_ch->io_path_list, io_path, tailq);

	io_path->nvme_ns = nvme_ns;

	io_path->nbdev_ch = nbdev_ch;
	STAILQ_INSERT_TAIL(&nbdev_ch->io_path_list, io_path, stailq);

	return 0;
}

@@ -587,6 +591,7 @@ _bdev_nvme_delete_io_path(struct nvme_bdev_channel *nbdev_ch, struct nvme_io_pat

	STAILQ_REMOVE(&nbdev_ch->io_path_list, io_path, nvme_io_path, stailq);

	TAILQ_REMOVE(&io_path->ctrlr_ch->io_path_list, io_path, tailq);
	ch = spdk_io_channel_from_ctx(io_path->ctrlr_ch);
	spdk_put_io_channel(ch);

@@ -1750,6 +1755,7 @@ bdev_nvme_create_ctrlr_channel_cb(void *io_device, void *ctx_buf)
#endif

	TAILQ_INIT(&ctrlr_ch->pending_resets);
	TAILQ_INIT(&ctrlr_ch->io_path_list);

	rc = bdev_nvme_create_qpair(ctrlr_ch);
	if (rc != 0) {
+9 −0
Original line number Diff line number Diff line
@@ -82,6 +82,7 @@ struct nvme_ns {
struct nvme_bdev_io;
struct nvme_bdev_ctrlr;
struct nvme_bdev;
struct nvme_io_path;

struct nvme_path_id {
	struct spdk_nvme_transport_id		trid;
@@ -164,6 +165,10 @@ struct nvme_ctrlr_channel {
	struct nvme_poll_group		*group;
	TAILQ_HEAD(, spdk_bdev_io)	pending_resets;
	TAILQ_ENTRY(nvme_ctrlr_channel)	tailq;

	/* The following is used to update io_path cache of nvme_bdev_channels. */
	TAILQ_HEAD(, nvme_io_path)	io_path_list;

};

#define nvme_ctrlr_channel_get_ctrlr(ctrlr_ch)	\
@@ -173,6 +178,10 @@ struct nvme_io_path {
	struct nvme_ns			*nvme_ns;
	struct nvme_ctrlr_channel	*ctrlr_ch;
	STAILQ_ENTRY(nvme_io_path)	stailq;

	/* The following are used to update io_path cache of the nvme_bdev_channel. */
	struct nvme_bdev_channel	*nbdev_ch;
	TAILQ_ENTRY(nvme_io_path)	tailq;
};

struct nvme_bdev_channel {