From 7078874b80c84e0f5bbb739a24ec11ea90832c66 Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Tue, 25 Oct 2022 22:05:21 +0900 Subject: [PATCH] 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 Change-Id: Ia642b13771f42505055f1372733825153085b805 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15027 Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins Reviewed-by: Jim Harris Reviewed-by: Aleksey Marchuk Reviewed-by: Krzysztof Karas --- module/bdev/error/vbdev_error.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/module/bdev/error/vbdev_error.c b/module/bdev/error/vbdev_error.c index 533dcddf3..46857876b 100644 --- a/module/bdev/error/vbdev_error.c +++ b/module/bdev/error/vbdev_error.c @@ -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);