module/raid: function for raid bdev_io completion
Use a dedicated function to complete the raid bdev_io. Signed-off-by: Artur Paszkiewicz <artur.paszkiewicz@intel.com> Change-Id: I2ef0d19b31064b56c63866713f18deccafaeb8f7 Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/471087 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
This commit is contained in:
parent
ae70d6a4a6
commit
6ba11b194e
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -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 */
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user