Commit 7058f853 authored by Ben Walker's avatar Ben Walker Committed by Jim Harris
Browse files

bdev: When a channel is destroyed, abort all queued I/O



Change-Id: I03d042cbb6de08f7e07b8c0ccc8af44d7b16ae3b
Signed-off-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-on: https://review.gerrithub.io/362614


Tested-by: default avatarSPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
parent 35ab7544
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -546,6 +546,24 @@ static void
spdk_bdev_channel_destroy(void *io_device, void *ctx_buf)
{
	struct spdk_bdev_channel	*ch = ctx_buf;
	struct spdk_bdev_io		*bdev_io, *tmp;
	uint32_t			core;

	core = spdk_env_get_current_core();

	TAILQ_FOREACH_SAFE(bdev_io, &g_bdev_mgr.need_buf_small[core], buf_link, tmp) {
		if (bdev_io->ch == ch) {
			TAILQ_REMOVE(&g_bdev_mgr.need_buf_small[core], bdev_io, buf_link);
			spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED);
		}
	}

	TAILQ_FOREACH_SAFE(bdev_io, &g_bdev_mgr.need_buf_large[core], buf_link, tmp) {
		if (bdev_io->ch == ch) {
			TAILQ_REMOVE(&g_bdev_mgr.need_buf_large[core], bdev_io, buf_link);
			spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED);
		}
	}

	spdk_put_io_channel(ch->channel);
	spdk_put_io_channel(ch->mgmt_channel);