Commit 82d797af authored by Niklas Cassel's avatar Niklas Cassel Committed by Tomasz Zawadzki
Browse files

bdev/zone: add zone state explicit open



Add a new zone state to represent an explicit open zone.

Many zoned specifications like ZBC/ZAC/ZNS have two different
zone states to represent an open zone: explicit open and
implicit open.

In e.g. ZNS, a zone is transitioned to explicit open when a
Zone Management Send is sent with a zone send action of open zone.

In ZNS, writing to e.g. an empty or closed zone, without first
sending a zone send action of open zone, will instead transition
the zone to implicit open.

The OCSSD specification only has a single open zone state.
In OCSSD, you can only transition to the open state by doing a write.
There is no separate function call to transition a zone to the open
state. Therefore, the OCSSD open state is most similar to the ZNS
implicit open state.

Since we cannot remove the SPDK_BDEV_ZONE_STATE_OPEN identifier,
for backwards compatibility reasons, make the SPDK_BDEV_ZONE_STATE_OPEN
identifier an alias to the new SPDK_BDEV_ZONE_STATE_IMP_OPEN identifier.

Signed-off-by: default avatarNiklas Cassel <niklas.cassel@wdc.com>
Change-Id: I98f3a280cd9e595100155568a3c0332c667a834b
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/6907


Community-CI: Broadcom CI
Community-CI: Mellanox Build Bot
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
parent 409cc6ec
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -58,11 +58,14 @@ enum spdk_bdev_zone_action {

enum spdk_bdev_zone_state {
	SPDK_BDEV_ZONE_STATE_EMPTY	= 0x0,
	SPDK_BDEV_ZONE_STATE_OPEN	= 0x1,
	SPDK_BDEV_ZONE_STATE_IMP_OPEN	= 0x1,
	/* OPEN is an alias for IMP_OPEN. OPEN is kept for backwards compatibility. */
	SPDK_BDEV_ZONE_STATE_OPEN	= SPDK_BDEV_ZONE_STATE_IMP_OPEN,
	SPDK_BDEV_ZONE_STATE_FULL	= 0x2,
	SPDK_BDEV_ZONE_STATE_CLOSED	= 0x3,
	SPDK_BDEV_ZONE_STATE_READ_ONLY	= 0x4,
	SPDK_BDEV_ZONE_STATE_OFFLINE	= 0x5,
	SPDK_BDEV_ZONE_STATE_EXP_OPEN	= 0x6,
};

struct spdk_bdev_zone_info {
@@ -83,6 +86,9 @@ uint64_t spdk_bdev_get_zone_size(const struct spdk_bdev *bdev);
/**
 * Get device maximum number of open zones.
 *
 * An open zone is defined as a zone being in zone state
 * SPDK_BDEV_ZONE_STATE_IMP_OPEN or SPDK_BDEV_ZONE_STATE_EXP_OPEN.
 *
 * If this value is 0, there is no limit.
 *
 * \param bdev Block device to query.