From 6ba11b194e45e8997186f9dba995e868e338a13e Mon Sep 17 00:00:00 2001 From: Artur Paszkiewicz Date: Thu, 10 Oct 2019 12:48:13 +0200 Subject: [PATCH] module/raid: function for raid bdev_io completion Use a dedicated function to complete the raid bdev_io. Signed-off-by: Artur Paszkiewicz Change-Id: I2ef0d19b31064b56c63866713f18deccafaeb8f7 Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/471087 Tested-by: SPDK CI Jenkins Reviewed-by: Jim Harris Reviewed-by: Shuhei Matsumoto --- module/bdev/raid/bdev_raid.c | 26 +++++++++++++++----------- module/bdev/raid/bdev_raid.h | 2 ++ module/bdev/raid/raid0.c | 22 +++++++++++----------- 3 files changed, 28 insertions(+), 22 deletions(-) diff --git a/module/bdev/raid/bdev_raid.c b/module/bdev/raid/bdev_raid.c index e321d5f3d..8e9fba00a 100644 --- a/module/bdev/raid/bdev_raid.c +++ b/module/bdev/raid/bdev_raid.c @@ -282,21 +282,28 @@ raid_bdev_destruct(void *ctxt) return 0; } +void +raid_bdev_io_complete(struct raid_bdev_io *raid_io, enum spdk_bdev_io_status status) +{ + struct spdk_bdev_io *bdev_io = spdk_bdev_io_from_ctx(raid_io); + + spdk_bdev_io_complete(bdev_io, status); +} + /* * brief: * raid_bdev_base_io_completion is the completion callback for member disk requests * params: * bdev_io - pointer to member disk requested bdev_io * success - true if successful, false if unsuccessful - * cb_arg - callback argument (parent raid bdev_io) + * cb_arg - callback argument (parent raid_bdev_io) * returns: * none */ void raid_bdev_base_io_completion(struct spdk_bdev_io *bdev_io, bool success, void *cb_arg) { - struct spdk_bdev_io *parent_io = cb_arg; - struct raid_bdev_io *raid_io = (struct raid_bdev_io *)parent_io->driver_ctx; + struct raid_bdev_io *raid_io = cb_arg; spdk_bdev_free_io(bdev_io); @@ -306,7 +313,7 @@ raid_bdev_base_io_completion(struct spdk_bdev_io *bdev_io, bool success, void *c raid_io->base_bdev_io_completed++; if (raid_io->base_bdev_io_completed == raid_io->base_bdev_io_expected) { - spdk_bdev_io_complete(parent_io, raid_io->base_bdev_io_status); + raid_bdev_io_complete(raid_io, raid_io->base_bdev_io_status); } } @@ -356,14 +363,12 @@ _raid_bdev_submit_reset_request(void *_raid_io) static void raid_bdev_submit_reset_request(struct raid_bdev_io *raid_io) { - struct spdk_bdev_io *bdev_io; struct raid_bdev *raid_bdev; int ret; uint8_t i; struct raid_base_bdev_info *base_info; struct spdk_io_channel *base_ch; - bdev_io = spdk_bdev_io_from_ctx(raid_io); raid_bdev = raid_io->raid_bdev; raid_io->base_bdev_io_expected = raid_bdev->num_base_bdevs; @@ -373,7 +378,7 @@ raid_bdev_submit_reset_request(struct raid_bdev_io *raid_io) base_info = &raid_bdev->base_bdev_info[i]; base_ch = raid_io->raid_ch->base_channel[i]; ret = spdk_bdev_reset(base_info->desc, base_ch, - raid_bdev_base_io_completion, bdev_io); + raid_bdev_base_io_completion, raid_io); if (ret == 0) { raid_io->base_bdev_io_submitted++; } else if (ret == -ENOMEM) { @@ -383,7 +388,7 @@ raid_bdev_submit_reset_request(struct raid_bdev_io *raid_io) } else { SPDK_ERRLOG("bdev io submit error not due to ENOMEM, it should not happen\n"); assert(false); - spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED); + raid_bdev_io_complete(raid_io, SPDK_BDEV_IO_STATUS_FAILED); return; } } @@ -406,7 +411,7 @@ raid_bdev_get_buf_cb(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_io, struct raid_bdev_io *raid_io = (struct raid_bdev_io *)bdev_io->driver_ctx; if (!success) { - spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED); + raid_bdev_io_complete(raid_io, SPDK_BDEV_IO_STATUS_FAILED); return; } @@ -455,10 +460,9 @@ raid_bdev_submit_request(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_i default: SPDK_ERRLOG("submit request, invalid io type %u\n", bdev_io->type); - spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED); + raid_bdev_io_complete(raid_io, SPDK_BDEV_IO_STATUS_FAILED); break; } - } /* diff --git a/module/bdev/raid/bdev_raid.h b/module/bdev/raid/bdev_raid.h index 9bd9ea99e..affcbf669 100644 --- a/module/bdev/raid/bdev_raid.h +++ b/module/bdev/raid/bdev_raid.h @@ -277,5 +277,7 @@ raid_bdev_base_io_completion(struct spdk_bdev_io *bdev_io, bool success, void *c void raid_bdev_queue_io_wait(struct raid_bdev_io *raid_io, struct spdk_bdev *bdev, struct spdk_io_channel *ch, spdk_bdev_io_wait_cb cb_fn); +void +raid_bdev_io_complete(struct raid_bdev_io *raid_io, enum spdk_bdev_io_status status); #endif /* SPDK_BDEV_RAID_INTERNAL_H */ diff --git a/module/bdev/raid/raid0.c b/module/bdev/raid/raid0.c index c83b93323..69fc73eeb 100644 --- a/module/bdev/raid/raid0.c +++ b/module/bdev/raid/raid0.c @@ -47,21 +47,21 @@ * params: * bdev_io - pointer to bdev io submitted to lower layers, like child io * success - bdev_io status - * cb_arg - function callback context, like parent io pointer + * cb_arg - function callback context (parent raid_bdev_io) * returns: * none */ static void raid0_bdev_io_completion(struct spdk_bdev_io *bdev_io, bool success, void *cb_arg) { - struct spdk_bdev_io *parent_io = cb_arg; + struct raid_bdev_io *raid_io = cb_arg; spdk_bdev_free_io(bdev_io); if (success) { - spdk_bdev_io_complete(parent_io, SPDK_BDEV_IO_STATUS_SUCCESS); + raid_bdev_io_complete(raid_io, SPDK_BDEV_IO_STATUS_SUCCESS); } else { - spdk_bdev_io_complete(parent_io, SPDK_BDEV_IO_STATUS_FAILED); + raid_bdev_io_complete(raid_io, SPDK_BDEV_IO_STATUS_FAILED); } } @@ -105,7 +105,7 @@ raid0_submit_rw_request(struct raid_bdev_io *raid_io) if (start_strip != end_strip && raid_bdev->num_base_bdevs > 1) { assert(false); SPDK_ERRLOG("I/O spans strip boundary!\n"); - spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED); + raid_bdev_io_complete(raid_io, SPDK_BDEV_IO_STATUS_FAILED); return; } @@ -132,12 +132,12 @@ raid0_submit_rw_request(struct raid_bdev_io *raid_io) ret = spdk_bdev_readv_blocks(base_info->desc, base_ch, bdev_io->u.bdev.iovs, bdev_io->u.bdev.iovcnt, pd_lba, pd_blocks, raid0_bdev_io_completion, - bdev_io); + raid_io); } else if (bdev_io->type == SPDK_BDEV_IO_TYPE_WRITE) { ret = spdk_bdev_writev_blocks(base_info->desc, base_ch, bdev_io->u.bdev.iovs, bdev_io->u.bdev.iovcnt, pd_lba, pd_blocks, raid0_bdev_io_completion, - bdev_io); + raid_io); } else { SPDK_ERRLOG("Recvd not supported io type %u\n", bdev_io->type); assert(0); @@ -149,7 +149,7 @@ raid0_submit_rw_request(struct raid_bdev_io *raid_io) } else if (ret != 0) { SPDK_ERRLOG("bdev io submit error not due to ENOMEM, it should not happen\n"); assert(false); - spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED); + raid_bdev_io_complete(raid_io, SPDK_BDEV_IO_STATUS_FAILED); } } @@ -304,13 +304,13 @@ raid0_submit_null_payload_request(struct raid_bdev_io *raid_io) case SPDK_BDEV_IO_TYPE_UNMAP: ret = spdk_bdev_unmap_blocks(base_info->desc, base_ch, offset_in_disk, nblocks_in_disk, - raid_bdev_base_io_completion, bdev_io); + raid_bdev_base_io_completion, raid_io); break; case SPDK_BDEV_IO_TYPE_FLUSH: ret = spdk_bdev_flush_blocks(base_info->desc, base_ch, offset_in_disk, nblocks_in_disk, - raid_bdev_base_io_completion, bdev_io); + raid_bdev_base_io_completion, raid_io); break; default: @@ -328,7 +328,7 @@ raid0_submit_null_payload_request(struct raid_bdev_io *raid_io) } else { SPDK_ERRLOG("bdev io submit error not due to ENOMEM, it should not happen\n"); assert(false); - spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED); + raid_bdev_io_complete(raid_io, SPDK_BDEV_IO_STATUS_FAILED); return; } }