From cf1e19c70731177a893ff3d8e24c7ce543a32775 Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Tue, 29 Mar 2022 16:36:50 +0900 Subject: [PATCH] bdev/error: Use bdev_open_ext() to inject error instead of bdev_get_by_name() Signed-off-by: Shuhei Matsumoto Change-Id: Iba05ed816c2ecb4346dd6a77e9579c6af6d2b06f Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/12071 Tested-by: SPDK CI Jenkins Community-CI: Broadcom CI Community-CI: Mellanox Build Bot Reviewed-by: Aleksey Marchuk Reviewed-by: Jim Harris Reviewed-by: Ben Walker --- module/bdev/error/vbdev_error.c | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/module/bdev/error/vbdev_error.c b/module/bdev/error/vbdev_error.c index 5b8f7fffe..c93cbdd51 100644 --- a/module/bdev/error/vbdev_error.c +++ b/module/bdev/error/vbdev_error.c @@ -94,22 +94,32 @@ static struct spdk_bdev_module error_if = { SPDK_BDEV_MODULE_REGISTER(error, &error_if) +static void +dummy_bdev_event_cb(enum spdk_bdev_event_type type, struct spdk_bdev *bdev, void *ctx) +{ +} + int vbdev_error_inject_error(char *name, uint32_t io_type, uint32_t error_type, uint32_t error_num) { + struct spdk_bdev_desc *desc; struct spdk_bdev *bdev; struct spdk_bdev_part *part; struct error_disk *error_disk = NULL; uint32_t i; + int rc = 0; pthread_mutex_lock(&g_vbdev_error_mutex); - bdev = spdk_bdev_get_by_name(name); - if (!bdev) { - SPDK_ERRLOG("Could not find ErrorInjection bdev %s\n", name); + + rc = spdk_bdev_open_ext(name, false, dummy_bdev_event_cb, NULL, &desc); + if (rc != 0) { + SPDK_ERRLOG("Could not open ErrorInjection bdev %s\n", name); pthread_mutex_unlock(&g_vbdev_error_mutex); - return -ENODEV; + return rc; } + bdev = spdk_bdev_desc_get_bdev(desc); + TAILQ_FOREACH(part, &g_error_disks, tailq) { if (bdev == spdk_bdev_part_get_bdev(part)) { error_disk = (struct error_disk *)part; @@ -119,8 +129,8 @@ vbdev_error_inject_error(char *name, uint32_t io_type, uint32_t error_type, uint if (error_disk == NULL) { SPDK_ERRLOG("Could not find ErrorInjection bdev %s\n", name); - pthread_mutex_unlock(&g_vbdev_error_mutex); - return -ENODEV; + rc = -ENODEV; + goto exit; } if (0xffffffff == io_type) { @@ -136,8 +146,11 @@ vbdev_error_inject_error(char *name, uint32_t io_type, uint32_t error_type, uint error_disk->error_vector[io_type].error_type = error_type; error_disk->error_vector[io_type].error_num = error_num; } + +exit: + spdk_bdev_close(desc); pthread_mutex_unlock(&g_vbdev_error_mutex); - return 0; + return rc; } static void