bdev/error: Use switch-case to process error injection at submission
The following patches will support data corruption. For write I/O, data corruption will be injected before submission, and for read I/O, data corruption will be injected after completion. To do these cleanly, use switch-case and reorder to process error injection at submission. Signed-off-by: Shuhei Matsumoto <smatsumoto@nvidia.com> Change-Id: I3b830b4331cb4c7d0794a555957cdcc73902c14f Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15026 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Krzysztof Karas <krzysztof.karas@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Aleksey Marchuk <alexeymar@nvidia.com> Community-CI: Mellanox Build Bot
This commit is contained in:
parent
7078874b80
commit
fa5e7d1b8d
@ -162,6 +162,7 @@ vbdev_error_submit_request(struct spdk_io_channel *_ch, struct spdk_bdev_io *bde
|
|||||||
struct error_channel *ch = spdk_io_channel_get_ctx(_ch);
|
struct error_channel *ch = spdk_io_channel_get_ctx(_ch);
|
||||||
struct error_disk *error_disk = bdev_io->bdev->ctxt;
|
struct error_disk *error_disk = bdev_io->bdev->ctxt;
|
||||||
uint32_t error_type;
|
uint32_t error_type;
|
||||||
|
int rc;
|
||||||
|
|
||||||
if (bdev_io->type == SPDK_BDEV_IO_TYPE_RESET) {
|
if (bdev_io->type == SPDK_BDEV_IO_TYPE_RESET) {
|
||||||
vbdev_error_reset(error_disk, bdev_io);
|
vbdev_error_reset(error_disk, bdev_io);
|
||||||
@ -169,20 +170,26 @@ vbdev_error_submit_request(struct spdk_io_channel *_ch, struct spdk_bdev_io *bde
|
|||||||
}
|
}
|
||||||
|
|
||||||
error_type = vbdev_error_get_error_type(error_disk, bdev_io->type);
|
error_type = vbdev_error_get_error_type(error_disk, bdev_io->type);
|
||||||
if (error_type == 0) {
|
switch (error_type) {
|
||||||
int rc = spdk_bdev_part_submit_request(&ch->part_ch, bdev_io);
|
case VBDEV_IO_FAILURE:
|
||||||
|
error_disk->error_vector[bdev_io->type].error_num--;
|
||||||
|
spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED);
|
||||||
|
break;
|
||||||
|
case VBDEV_IO_PENDING:
|
||||||
|
TAILQ_INSERT_TAIL(&error_disk->pending_ios, bdev_io, module_link);
|
||||||
|
error_disk->error_vector[bdev_io->type].error_num--;
|
||||||
|
break;
|
||||||
|
case 0:
|
||||||
|
rc = spdk_bdev_part_submit_request(&ch->part_ch, bdev_io);
|
||||||
|
|
||||||
if (rc) {
|
if (rc) {
|
||||||
SPDK_ERRLOG("bdev_error: submit request failed, rc=%d\n", rc);
|
SPDK_ERRLOG("bdev_error: submit request failed, rc=%d\n", rc);
|
||||||
spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED);
|
spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED);
|
||||||
}
|
}
|
||||||
return;
|
break;
|
||||||
} else if (error_type == VBDEV_IO_FAILURE) {
|
default:
|
||||||
error_disk->error_vector[bdev_io->type].error_num--;
|
assert(false);
|
||||||
spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED);
|
break;
|
||||||
} else if (error_type == VBDEV_IO_PENDING) {
|
|
||||||
TAILQ_INSERT_TAIL(&error_disk->pending_ios, bdev_io, module_link);
|
|
||||||
error_disk->error_vector[bdev_io->type].error_num--;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user