Commit dbf0a9a5 authored by Ben Walker's avatar Ben Walker Committed by Tomasz Zawadzki
Browse files

Revert "bdev: Remove module_link from spdk_bdev_io"



This reverts commit d1fd0d13.

Change-Id: I5f82863f3948e2e17113575aa103ddbdc5cdbc14
Signed-off-by: default avatarBen Walker <ben@nvidia.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/23190


Reviewed-by: default avatarShuhei Matsumoto <smatsumoto@nvidia.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Community-CI: Mellanox Build Bot
Reviewed-by: default avatarAleksey Marchuk <alexeymar@nvidia.com>
parent 00a557f2
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -928,6 +928,9 @@ struct spdk_bdev_io {
		} zone_mgmt;
	} u;

	/** It may be used by modules to put the bdev_io into its own list. */
	TAILQ_ENTRY(spdk_bdev_io) module_link;

	/**
	 *  Fields that are used internally by the bdev subsystem.  Bdev modules
	 *  must not read or write to these fields.
+6 −21
Original line number Diff line number Diff line
@@ -126,12 +126,8 @@ struct ut_expected_io {
	TAILQ_ENTRY(ut_expected_io)	link;
};

struct bdev_ut_io {
	TAILQ_ENTRY(bdev_ut_io)		link;
};

struct bdev_ut_channel {
	TAILQ_HEAD(, bdev_ut_io)	outstanding_io;
	TAILQ_HEAD(, spdk_bdev_io)	outstanding_io;
	uint32_t			outstanding_io_count;
	TAILQ_HEAD(, ut_expected_io)	expected_io;
};
@@ -204,7 +200,6 @@ stub_submit_request(struct spdk_io_channel *_ch, struct spdk_bdev_io *bdev_io)
	struct ut_expected_io *expected_io;
	struct iovec *iov, *expected_iov;
	struct spdk_bdev_io *bio_to_abort;
	struct bdev_ut_io *bio;
	int i;

	g_bdev_io = bdev_io;
@@ -246,10 +241,9 @@ stub_submit_request(struct spdk_io_channel *_ch, struct spdk_bdev_io *bdev_io)

	if (bdev_io->type == SPDK_BDEV_IO_TYPE_ABORT) {
		if (g_io_exp_status == SPDK_BDEV_IO_STATUS_SUCCESS) {
			TAILQ_FOREACH(bio, &ch->outstanding_io, link) {
				bio_to_abort = spdk_bdev_io_from_ctx(bio);
			TAILQ_FOREACH(bio_to_abort, &ch->outstanding_io, module_link) {
				if (bio_to_abort == bdev_io->u.abort.bio_to_abort) {
					TAILQ_REMOVE(&ch->outstanding_io, bio, link);
					TAILQ_REMOVE(&ch->outstanding_io, bio_to_abort, module_link);
					ch->outstanding_io_count--;
					spdk_bdev_io_complete(bio_to_abort, SPDK_BDEV_IO_STATUS_FAILED);
					break;
@@ -303,7 +297,7 @@ stub_submit_request(struct spdk_io_channel *_ch, struct spdk_bdev_io *bdev_io)
		bdev_io->u.bdev.seek.offset = g_seek_hole_offset;
	}

	TAILQ_INSERT_TAIL(&ch->outstanding_io, (struct bdev_ut_io *)bdev_io->driver_ctx, link);
	TAILQ_INSERT_TAIL(&ch->outstanding_io, bdev_io, module_link);
	ch->outstanding_io_count++;

	expected_io = TAILQ_FIRST(&ch->expected_io);
@@ -372,7 +366,6 @@ static uint32_t
stub_complete_io(uint32_t num_to_complete)
{
	struct bdev_ut_channel *ch = g_bdev_ut_channel;
	struct bdev_ut_io *bio;
	struct spdk_bdev_io *bdev_io;
	static enum spdk_bdev_io_status io_status;
	uint32_t num_completed = 0;
@@ -381,9 +374,8 @@ stub_complete_io(uint32_t num_to_complete)
		if (TAILQ_EMPTY(&ch->outstanding_io)) {
			break;
		}
		bio = TAILQ_FIRST(&ch->outstanding_io);
		TAILQ_REMOVE(&ch->outstanding_io, bio, link);
		bdev_io = spdk_bdev_io_from_ctx(bio);
		bdev_io = TAILQ_FIRST(&ch->outstanding_io);
		TAILQ_REMOVE(&ch->outstanding_io, bdev_io, module_link);
		ch->outstanding_io_count--;
		io_status = g_io_exp_status == SPDK_BDEV_IO_STATUS_SUCCESS ? SPDK_BDEV_IO_STATUS_SUCCESS :
			    g_io_exp_status;
@@ -496,19 +488,12 @@ vbdev_ut_module_fini(void)
{
}

static int
vbdev_ut_get_ctx_size(void)
{
	return sizeof(struct bdev_ut_io);
}

struct spdk_bdev_module vbdev_ut_if = {
	.name = "vbdev_ut",
	.module_init = vbdev_ut_module_init,
	.module_fini = vbdev_ut_module_fini,
	.examine_config = vbdev_ut_examine_config,
	.examine_disk = vbdev_ut_examine_disk,
	.get_ctx_size = vbdev_ut_get_ctx_size,
};

SPDK_BDEV_MODULE_REGISTER(bdev_ut, &bdev_ut_if)
+11 −28
Original line number Diff line number Diff line
@@ -73,12 +73,8 @@ struct ut_bdev {
	void			*io_target;
};

struct ut_bdev_io {
	TAILQ_ENTRY(ut_bdev_io)		link;
};

struct ut_bdev_channel {
	TAILQ_HEAD(, ut_bdev_io)	outstanding_io;
	TAILQ_HEAD(, spdk_bdev_io)	outstanding_io;
	uint32_t			outstanding_cnt;
	uint32_t			avail_cnt;
	struct spdk_thread		*thread;
@@ -164,13 +160,13 @@ static void
stub_reset_channel(void *ctx)
{
	struct ut_bdev_channel *ch = ctx;
	struct ut_bdev_io *bio;
	struct spdk_bdev_io *io;

	while (!TAILQ_EMPTY(&ch->outstanding_io)) {
		bio = TAILQ_FIRST(&ch->outstanding_io);
		TAILQ_REMOVE(&ch->outstanding_io, bio, link);
		io = TAILQ_FIRST(&ch->outstanding_io);
		TAILQ_REMOVE(&ch->outstanding_io, io, module_link);
		ch->outstanding_cnt--;
		spdk_bdev_io_complete(spdk_bdev_io_from_ctx(bio), SPDK_BDEV_IO_STATUS_ABORTED);
		spdk_bdev_io_complete(io, SPDK_BDEV_IO_STATUS_ABORTED);
		ch->avail_cnt++;
	}
}
@@ -180,7 +176,6 @@ stub_submit_request(struct spdk_io_channel *_ch, struct spdk_bdev_io *bdev_io)
{
	struct ut_bdev_channel *ch = spdk_io_channel_get_ctx(_ch), *tmp_ch;
	struct spdk_bdev_io *io;
	struct ut_bdev_io *bio;

	if (bdev_io->type == SPDK_BDEV_IO_TYPE_RESET) {
		TAILQ_FOREACH(tmp_ch, &g_ut_channels, link) {
@@ -191,10 +186,9 @@ stub_submit_request(struct spdk_io_channel *_ch, struct spdk_bdev_io *bdev_io)
			}
		}
	} else if (bdev_io->type == SPDK_BDEV_IO_TYPE_ABORT) {
		TAILQ_FOREACH(bio, &ch->outstanding_io, link) {
			io = spdk_bdev_io_from_ctx(bio);
		TAILQ_FOREACH(io, &ch->outstanding_io, module_link) {
			if (io == bdev_io->u.abort.bio_to_abort) {
				TAILQ_REMOVE(&ch->outstanding_io, bio, link);
				TAILQ_REMOVE(&ch->outstanding_io, io, module_link);
				ch->outstanding_cnt--;
				spdk_bdev_io_complete(io, SPDK_BDEV_IO_STATUS_ABORTED);
				ch->avail_cnt++;
@@ -209,7 +203,7 @@ stub_submit_request(struct spdk_io_channel *_ch, struct spdk_bdev_io *bdev_io)
	}

	if (ch->avail_cnt > 0) {
		TAILQ_INSERT_TAIL(&ch->outstanding_io, (struct ut_bdev_io *)bdev_io->driver_ctx, link);
		TAILQ_INSERT_TAIL(&ch->outstanding_io, bdev_io, module_link);
		ch->outstanding_cnt++;
		ch->avail_cnt--;
	} else {
@@ -222,7 +216,6 @@ stub_complete_io(void *io_target, uint32_t num_to_complete)
{
	struct spdk_io_channel *_ch = spdk_get_io_channel(io_target);
	struct ut_bdev_channel *ch = spdk_io_channel_get_ctx(_ch);
	struct ut_bdev_io *bio;
	struct spdk_bdev_io *io;
	bool complete_all = (num_to_complete == 0);
	uint32_t num_completed = 0;
@@ -231,9 +224,8 @@ stub_complete_io(void *io_target, uint32_t num_to_complete)
		if (TAILQ_EMPTY(&ch->outstanding_io)) {
			break;
		}
		bio = TAILQ_FIRST(&ch->outstanding_io);
		TAILQ_REMOVE(&ch->outstanding_io, bio, link);
		io = spdk_bdev_io_from_ctx(bio);
		io = TAILQ_FIRST(&ch->outstanding_io);
		TAILQ_REMOVE(&ch->outstanding_io, io, module_link);
		ch->outstanding_cnt--;
		spdk_bdev_io_complete(io, SPDK_BDEV_IO_STATUS_SUCCESS);
		ch->avail_cnt++;
@@ -282,12 +274,6 @@ fini_start(void)
	g_fini_start_called = true;
}

static int
get_ctx_size(void)
{
	return sizeof(struct ut_bdev_io);
}

struct spdk_bdev_module bdev_ut_if = {
	.name = "bdev_ut",
	.module_init = module_init,
@@ -295,7 +281,6 @@ struct spdk_bdev_module bdev_ut_if = {
	.async_init = true,
	.init_complete = init_complete,
	.fini_start = fini_start,
	.get_ctx_size = get_ctx_size,
};

SPDK_BDEV_MODULE_REGISTER(bdev_ut, &bdev_ut_if)
@@ -849,12 +834,10 @@ count_queued_resets(void *io_target)
{
	struct spdk_io_channel *_ch = spdk_get_io_channel(io_target);
	struct ut_bdev_channel *ch = spdk_io_channel_get_ctx(_ch);
	struct ut_bdev_io *bio;
	struct spdk_bdev_io *io;
	uint32_t submitted_resets = 0;

	TAILQ_FOREACH(bio, &ch->outstanding_io, link) {
		io = spdk_bdev_io_from_ctx(bio);
	TAILQ_FOREACH(io, &ch->outstanding_io, module_link) {
		if (io->type == SPDK_BDEV_IO_TYPE_RESET) {
			submitted_resets++;
		}