Commit 5349f4b2 authored by wuzhouhui's avatar wuzhouhui Committed by Jim Harris
Browse files

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: default avatarwuzhouhui <wuzhouhui@kingsoft.com>
Reviewed-on: https://review.gerrithub.io/428321


Chandler-Test-Pool: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent 2c1aaa76
Loading
Loading
Loading
Loading
+4 −14
Original line number Diff line number Diff line
@@ -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;
}

/*
+4 −1
Original line number Diff line number Diff line
@@ -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,

	/*