diff --git a/lib/bdev/raid/bdev_raid.c b/lib/bdev/raid/bdev_raid.c index b0c6fd61c..ec90ff377 100644 --- a/lib/bdev/raid/bdev_raid.c +++ b/lib/bdev/raid/bdev_raid.c @@ -1848,6 +1848,17 @@ raid_bdev_remove_base_devices(struct raid_bdev_config *raid_cfg, return; } + if (raid_bdev->destroy_started) { + SPDK_DEBUGLOG(SPDK_LOG_BDEV_RAID, "destroying raid bdev %s is already started\n", + raid_cfg->name); + if (cb_fn) { + cb_fn(cb_arg, -EALREADY); + } + return; + } + + raid_bdev->destroy_started = true; + for (i = 0; i < raid_bdev->num_base_bdevs; i++) { info = &raid_bdev->base_bdev_info[i]; diff --git a/lib/bdev/raid/bdev_raid.h b/lib/bdev/raid/bdev_raid.h index 36b396ac4..8f055100f 100644 --- a/lib/bdev/raid/bdev_raid.h +++ b/lib/bdev/raid/bdev_raid.h @@ -127,6 +127,9 @@ struct raid_bdev { /* Set to true if destruct is called for this raid bdev */ bool destruct_called; + + /* Set to true if destroy of this raid bdev is started. */ + bool destroy_started; }; /*