diff --git a/lib/bdev/bdev.c b/lib/bdev/bdev.c index 06fc93262..1a4aa589b 100644 --- a/lib/bdev/bdev.c +++ b/lib/bdev/bdev.c @@ -6997,6 +6997,12 @@ spdk_for_each_bdev(void *ctx, spdk_for_each_bdev_fn fn) rc = bdev_open(bdev, false, desc); if (rc != 0) { bdev_desc_free(desc); + if (rc == -ENODEV) { + /* Ignore the error and move to the next bdev. */ + rc = 0; + bdev = spdk_bdev_next(bdev); + continue; + } break; } pthread_mutex_unlock(&g_bdev_mgr.mutex); @@ -7035,6 +7041,12 @@ spdk_for_each_bdev_leaf(void *ctx, spdk_for_each_bdev_fn fn) rc = bdev_open(bdev, false, desc); if (rc != 0) { bdev_desc_free(desc); + if (rc == -ENODEV) { + /* Ignore the error and move to the next bdev. */ + rc = 0; + bdev = spdk_bdev_next_leaf(bdev); + continue; + } break; } pthread_mutex_unlock(&g_bdev_mgr.mutex); diff --git a/test/unit/lib/bdev/bdev.c/bdev_ut.c b/test/unit/lib/bdev/bdev.c/bdev_ut.c index 952df403a..c546d81da 100644 --- a/test/unit/lib/bdev/bdev.c/bdev_ut.c +++ b/test/unit/lib/bdev/bdev.c/bdev_ut.c @@ -5939,6 +5939,7 @@ for_each_bdev_test(void) int rc, count; bdev[0] = allocate_bdev("bdev0"); + bdev[0]->internal.status = SPDK_BDEV_STATUS_REMOVING; bdev[1] = allocate_bdev("bdev1"); rc = spdk_bdev_module_claim_bdev(bdev[1], NULL, &bdev_ut_if); @@ -5963,13 +5964,14 @@ for_each_bdev_test(void) count = 0; rc = spdk_for_each_bdev(&count, count_bdevs); CU_ASSERT(rc == 0); - CU_ASSERT(count == 8); + CU_ASSERT(count == 7); count = 0; rc = spdk_for_each_bdev_leaf(&count, count_bdevs); CU_ASSERT(rc == 0); - CU_ASSERT(count == 5); + CU_ASSERT(count == 4); + bdev[0]->internal.status = SPDK_BDEV_STATUS_READY; free_bdev(bdev[0]); free_bdev(bdev[1]); free_bdev(bdev[2]);