From 924a099540d9f70d1ab471589b28bbf4cc398132 Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Tue, 7 Aug 2018 09:03:30 +0900 Subject: [PATCH] bdev/raid: Consolidate transition to offline when raid bdev configure failed When raid bdev goes to offline, manual removal of raid bdev may be required. This patch tries to highlight paths to transit to offline when configuring raid bdev failed. Change-Id: I394984691fdf1d270d4e107e3131b677b42af49e Signed-off-by: Shuhei Matsumoto Reviewed-on: https://review.gerrithub.io/421205 Chandler-Test-Pool: SPDK Automated Test System Tested-by: SPDK CI Jenkins Reviewed-by: Kunal Sablok Reviewed-by: Jim Harris Reviewed-by: Ben Walker --- lib/bdev/raid/bdev_raid.c | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/lib/bdev/raid/bdev_raid.c b/lib/bdev/raid/bdev_raid.c index 02e747029..b9b1345ae 100644 --- a/lib/bdev/raid/bdev_raid.c +++ b/lib/bdev/raid/bdev_raid.c @@ -1273,10 +1273,7 @@ raid_bdev_configure(struct raid_bdev *raid_bdev) * have same blocklen */ SPDK_ERRLOG("Blocklen of various bdevs not matching\n"); - raid_bdev->state = RAID_BDEV_STATE_OFFLINE; - TAILQ_REMOVE(&g_spdk_raid_bdev_configuring_list, raid_bdev, link_specific_list); - TAILQ_INSERT_TAIL(&g_spdk_raid_bdev_offline_list, raid_bdev, link_specific_list); - return -1; + goto offline; } } @@ -1284,10 +1281,7 @@ raid_bdev_configure(struct raid_bdev *raid_bdev) raid_bdev_gen->name = strdup(raid_bdev->raid_bdev_config->name); if (!raid_bdev_gen->name) { SPDK_ERRLOG("Unable to allocate name for raid\n"); - raid_bdev->state = RAID_BDEV_STATE_OFFLINE; - TAILQ_REMOVE(&g_spdk_raid_bdev_configuring_list, raid_bdev, link_specific_list); - TAILQ_INSERT_TAIL(&g_spdk_raid_bdev_offline_list, raid_bdev, link_specific_list); - return -1; + goto offline; } raid_bdev_gen->product_name = "Pooled Device"; raid_bdev_gen->write_cache = 0; @@ -1324,10 +1318,7 @@ raid_bdev_configure(struct raid_bdev *raid_bdev) */ SPDK_ERRLOG("Unable to register pooled bdev\n"); spdk_io_device_unregister(raid_bdev, NULL); - raid_bdev->state = RAID_BDEV_STATE_OFFLINE; - TAILQ_REMOVE(&g_spdk_raid_bdev_configuring_list, raid_bdev, link_specific_list); - TAILQ_INSERT_TAIL(&g_spdk_raid_bdev_offline_list, raid_bdev, link_specific_list); - return -1; + goto offline; } SPDK_DEBUGLOG(SPDK_LOG_BDEV_RAID, "raid bdev generic %p\n", raid_bdev_gen); TAILQ_REMOVE(&g_spdk_raid_bdev_configuring_list, raid_bdev, link_specific_list); @@ -1337,6 +1328,12 @@ raid_bdev_configure(struct raid_bdev *raid_bdev) } return 0; + +offline: + raid_bdev->state = RAID_BDEV_STATE_OFFLINE; + TAILQ_REMOVE(&g_spdk_raid_bdev_configuring_list, raid_bdev, link_specific_list); + TAILQ_INSERT_TAIL(&g_spdk_raid_bdev_offline_list, raid_bdev, link_specific_list); + return -1; } /*