From 5349f4b2d495d82c60b9cf2707f4a0b85dcd3195 Mon Sep 17 00:00:00 2001 From: wuzhouhui Date: Mon, 8 Oct 2018 12:04:34 +0800 Subject: [PATCH] bdev/raid: do not set configuring raid bdev to offline Previously, the difference between configuring and offline is unclear, this patch just fixes it. The key difference should be whether the raid bdev have ever registered. Offline is registered before but unregistered now, and configuring has never registered. According to the above, we should never set configuring raid bdev to offline because it never got registered. Change-Id: Id44ef6654e032993ffb8444e7e7ae3e43a9b0f16 Signed-off-by: wuzhouhui Reviewed-on: https://review.gerrithub.io/428321 Chandler-Test-Pool: SPDK Automated Test System Reviewed-by: Jim Harris Reviewed-by: Shuhei Matsumoto Tested-by: SPDK CI Jenkins --- lib/bdev/raid/bdev_raid.c | 18 ++++-------------- lib/bdev/raid/bdev_raid.h | 5 ++++- 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/lib/bdev/raid/bdev_raid.c b/lib/bdev/raid/bdev_raid.c index 247998408..4bc52d787 100644 --- a/lib/bdev/raid/bdev_raid.c +++ b/lib/bdev/raid/bdev_raid.c @@ -1360,8 +1360,7 @@ raid_bdev_configure(struct raid_bdev *raid_bdev) * have same blocklen */ SPDK_ERRLOG("Blocklen of various bdevs not matching\n"); - rc = -EINVAL; - goto offline; + return -EINVAL; } } @@ -1403,13 +1402,10 @@ raid_bdev_configure(struct raid_bdev *raid_bdev) raid_bdev->bdev.name); rc = spdk_bdev_register(raid_bdev_gen); if (rc != 0) { - /* - * If failed to register raid bdev to bdev layer, make raid bdev offline - * and add to offline list - */ - SPDK_ERRLOG("Unable to register pooled bdev\n"); + SPDK_ERRLOG("Unable to register pooled bdev and stay at configuring state\n"); spdk_io_device_unregister(raid_bdev, NULL); - goto offline; + raid_bdev->state = RAID_BDEV_STATE_CONFIGURING; + return rc; } SPDK_DEBUGLOG(SPDK_LOG_BDEV_RAID, "raid bdev generic %p\n", raid_bdev_gen); TAILQ_REMOVE(&g_spdk_raid_bdev_configuring_list, raid_bdev, state_link); @@ -1419,12 +1415,6 @@ 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, state_link); - TAILQ_INSERT_TAIL(&g_spdk_raid_bdev_offline_list, raid_bdev, state_link); - return rc; } /* diff --git a/lib/bdev/raid/bdev_raid.h b/lib/bdev/raid/bdev_raid.h index 0a6ea5e7f..39f055ed5 100644 --- a/lib/bdev/raid/bdev_raid.h +++ b/lib/bdev/raid/bdev_raid.h @@ -44,7 +44,10 @@ enum raid_bdev_state { /* raid bdev is ready and is seen by upper layers */ RAID_BDEV_STATE_ONLINE, - /* raid bdev is configuring, not all underlying bdevs are present */ + /* + * raid bdev is configuring, not all underlying bdevs are present. + * And can't be seen by upper layers. + */ RAID_BDEV_STATE_CONFIGURING, /*