From 152cce0d53bdd8799240a35d956297fcbaf2b10e Mon Sep 17 00:00:00 2001 From: Artur Paszkiewicz Date: Thu, 10 Oct 2019 11:23:01 +0200 Subject: [PATCH] module/raid: replace ch with raid_ch in struct raid_bdev_io The original io channel is not used directly, only its context (struct raid_bdev_io_channel) which contains member bdevs' io channels. Store it directly in raid_bdev_io to eliminate conversions. Signed-off-by: Artur Paszkiewicz Change-Id: Ibff64f75ceff9bf1d431cc3071dfc99f374107ea Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/471081 Tested-by: SPDK CI Jenkins Reviewed-by: Jim Harris Reviewed-by: Shuhei Matsumoto --- module/bdev/raid/bdev_raid.c | 11 ++++------- module/bdev/raid/bdev_raid.h | 4 ++-- module/bdev/raid/raid0.c | 10 ++++------ 3 files changed, 10 insertions(+), 15 deletions(-) diff --git a/module/bdev/raid/bdev_raid.c b/module/bdev/raid/bdev_raid.c index db6a24b6f..4326fbf06 100644 --- a/module/bdev/raid/bdev_raid.c +++ b/module/bdev/raid/bdev_raid.c @@ -327,7 +327,6 @@ raid_bdev_queue_io_wait(struct spdk_bdev_io *raid_bdev_io, uint8_t pd_idx, spdk_bdev_io_wait_cb cb_fn, int ret) { struct raid_bdev_io *raid_io = (struct raid_bdev_io *)raid_bdev_io->driver_ctx; - struct raid_bdev_io_channel *raid_ch = spdk_io_channel_get_ctx(raid_io->ch); struct raid_bdev *raid_bdev = (struct raid_bdev *)raid_bdev_io->bdev->ctxt; assert(ret != 0); @@ -337,7 +336,7 @@ raid_bdev_queue_io_wait(struct spdk_bdev_io *raid_bdev_io, uint8_t pd_idx, raid_io->waitq_entry.cb_fn = cb_fn; raid_io->waitq_entry.cb_arg = raid_bdev_io; spdk_bdev_queue_io_wait(raid_bdev->base_bdev_info[pd_idx].bdev, - raid_ch->base_channel[pd_idx], + raid_io->raid_ch->base_channel[pd_idx], &raid_io->waitq_entry); return; } @@ -363,18 +362,16 @@ _raid_bdev_submit_reset_request_next(void *_bdev_io) struct spdk_bdev_io *bdev_io = _bdev_io; struct raid_bdev_io *raid_io; struct raid_bdev *raid_bdev; - struct raid_bdev_io_channel *raid_ch; int ret; uint8_t i; raid_bdev = (struct raid_bdev *)bdev_io->bdev->ctxt; raid_io = (struct raid_bdev_io *)bdev_io->driver_ctx; - raid_ch = spdk_io_channel_get_ctx(raid_io->ch); while (raid_io->base_bdev_io_submitted < raid_bdev->num_base_bdevs) { i = raid_io->base_bdev_io_submitted; ret = spdk_bdev_reset(raid_bdev->base_bdev_info[i].desc, - raid_ch->base_channel[i], + raid_io->raid_ch->base_channel[i], raid_bdev_base_io_completion, bdev_io); if (ret == 0) { raid_io->base_bdev_io_submitted++; @@ -404,7 +401,7 @@ _raid_bdev_submit_reset_request(struct spdk_io_channel *ch, struct spdk_bdev_io raid_bdev = (struct raid_bdev *)bdev_io->bdev->ctxt; raid_io = (struct raid_bdev_io *)bdev_io->driver_ctx; - raid_io->ch = ch; + raid_io->raid_ch = spdk_io_channel_get_ctx(ch); raid_io->base_bdev_io_submitted = 0; raid_io->base_bdev_io_completed = 0; raid_io->base_bdev_io_expected = raid_bdev->num_base_bdevs; @@ -428,7 +425,7 @@ _raid_bdev_submit_null_payload_request(struct spdk_io_channel *ch, struct spdk_b struct raid_bdev_io *raid_io; raid_io = (struct raid_bdev_io *)bdev_io->driver_ctx; - raid_io->ch = ch; + raid_io->raid_ch = spdk_io_channel_get_ctx(ch); raid_io->base_bdev_io_submitted = 0; raid_io->base_bdev_io_completed = 0; raid_io->base_bdev_io_status = SPDK_BDEV_IO_STATUS_SUCCESS; diff --git a/module/bdev/raid/bdev_raid.h b/module/bdev/raid/bdev_raid.h index 31194f885..332b110e4 100644 --- a/module/bdev/raid/bdev_raid.h +++ b/module/bdev/raid/bdev_raid.h @@ -93,8 +93,8 @@ struct raid_bdev_io { /* WaitQ entry, used only in waitq logic */ struct spdk_bdev_io_wait_entry waitq_entry; - /* Original channel for this IO, used in queuing logic */ - struct spdk_io_channel *ch; + /* Context of the original channel for this IO */ + struct raid_bdev_io_channel *raid_ch; /* Used for tracking progress on io requests sent to member disks. */ uint8_t base_bdev_io_submitted; diff --git a/module/bdev/raid/raid0.c b/module/bdev/raid/raid0.c index ce9335a64..5010ad236 100644 --- a/module/bdev/raid/raid0.c +++ b/module/bdev/raid/raid0.c @@ -82,7 +82,7 @@ static void raid0_submit_rw_request(struct spdk_bdev_io *bdev_io, uint64_t start_strip) { struct raid_bdev_io *raid_io = (struct raid_bdev_io *)bdev_io->driver_ctx; - struct raid_bdev_io_channel *raid_ch = spdk_io_channel_get_ctx(raid_io->ch); + struct raid_bdev_io_channel *raid_ch = raid_io->raid_ch; struct raid_bdev *raid_bdev = (struct raid_bdev *)bdev_io->bdev->ctxt; uint64_t pd_strip; uint32_t offset_in_strip; @@ -176,7 +176,7 @@ raid0_start_rw_request(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_io) raid_bdev = (struct raid_bdev *)bdev_io->bdev->ctxt; raid_io = (struct raid_bdev_io *)bdev_io->driver_ctx; - raid_io->ch = ch; + raid_io->raid_ch = spdk_io_channel_get_ctx(ch); start_strip = bdev_io->u.bdev.offset_blocks >> raid_bdev->strip_size_shift; end_strip = (bdev_io->u.bdev.offset_blocks + bdev_io->u.bdev.num_blocks - 1) >> raid_bdev->strip_size_shift; @@ -301,13 +301,11 @@ raid0_submit_null_payload_request(void *_bdev_io) struct spdk_bdev_io *bdev_io = _bdev_io; struct raid_bdev_io *raid_io; struct raid_bdev *raid_bdev; - struct raid_bdev_io_channel *raid_ch; struct raid_bdev_io_range io_range; int ret; raid_bdev = (struct raid_bdev *)bdev_io->bdev->ctxt; raid_io = (struct raid_bdev_io *)bdev_io->driver_ctx; - raid_ch = spdk_io_channel_get_ctx(raid_io->ch); _raid0_get_io_range(&io_range, raid_bdev->num_base_bdevs, raid_bdev->strip_size, raid_bdev->strip_size_shift, @@ -330,14 +328,14 @@ raid0_submit_null_payload_request(void *_bdev_io) switch (bdev_io->type) { case SPDK_BDEV_IO_TYPE_UNMAP: ret = spdk_bdev_unmap_blocks(raid_bdev->base_bdev_info[disk_idx].desc, - raid_ch->base_channel[disk_idx], + raid_io->raid_ch->base_channel[disk_idx], offset_in_disk, nblocks_in_disk, raid_bdev_base_io_completion, bdev_io); break; case SPDK_BDEV_IO_TYPE_FLUSH: ret = spdk_bdev_flush_blocks(raid_bdev->base_bdev_info[disk_idx].desc, - raid_ch->base_channel[disk_idx], + raid_io->raid_ch->base_channel[disk_idx], offset_in_disk, nblocks_in_disk, raid_bdev_base_io_completion, bdev_io); break;