bdev/error: Passthrough I/Os other than read, write, unmap, or flush

If we use error bdev in general use cases, the upper layer may submit
I/O commands other than read, write, unmap, or flush.

However, before this patch, the upper layer could submit only read,
write, unmap, and flush.

To improve the usability of error bdev, pass thorugh I/Os other than
read, write, unmap, or flush.

Signed-off-by: Shuhei Matsumoto <smatsumoto@nvidia.com>
Change-Id: Ia642b13771f42505055f1372733825153085b805
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15027
Community-CI: Mellanox Build Bot
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Aleksey Marchuk <alexeymar@nvidia.com>
Reviewed-by: Krzysztof Karas <krzysztof.karas@intel.com>
This commit is contained in:
Shuhei Matsumoto 2022-10-25 22:05:21 +09:00 committed by Tomasz Zawadzki
parent ffee98ddd9
commit 7078874b80

View File

@ -140,6 +140,16 @@ vbdev_error_reset(struct error_disk *error_disk, struct spdk_bdev_io *bdev_io)
static uint32_t
vbdev_error_get_error_type(struct error_disk *error_disk, uint32_t io_type)
{
switch (io_type) {
case SPDK_BDEV_IO_TYPE_READ:
case SPDK_BDEV_IO_TYPE_WRITE:
case SPDK_BDEV_IO_TYPE_UNMAP:
case SPDK_BDEV_IO_TYPE_FLUSH:
break;
default:
return 0;
}
if (error_disk->error_vector[io_type].error_num) {
return error_disk->error_vector[io_type].error_type;
}
@ -153,19 +163,9 @@ vbdev_error_submit_request(struct spdk_io_channel *_ch, struct spdk_bdev_io *bde
struct error_disk *error_disk = bdev_io->bdev->ctxt;
uint32_t error_type;
switch (bdev_io->type) {
case SPDK_BDEV_IO_TYPE_READ:
case SPDK_BDEV_IO_TYPE_WRITE:
case SPDK_BDEV_IO_TYPE_UNMAP:
case SPDK_BDEV_IO_TYPE_FLUSH:
break;
case SPDK_BDEV_IO_TYPE_RESET:
if (bdev_io->type == SPDK_BDEV_IO_TYPE_RESET) {
vbdev_error_reset(error_disk, bdev_io);
return;
default:
SPDK_ERRLOG("Error Injection: unknown I/O type %d\n", bdev_io->type);
spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED);
return;
}
error_type = vbdev_error_get_error_type(error_disk, bdev_io->type);