aboutsummaryrefslogtreecommitdiff
path: root/hw/block/nvme.c
diff options
context:
space:
mode:
authorDmitry Fomichev <dmitry.fomichev@wdc.com>2021-02-08 09:32:56 +0900
committerKlaus Jensen <k.jensen@samsung.com>2021-03-09 11:00:57 +0100
commit92323c8c2566b8ea4cdfe8e72a22d2651b0ee6af (patch)
tree2e754b6e2f6dfef05874ce9ac573f6594481b388 /hw/block/nvme.c
parente4e430b3d6baa1c908ba71ca37aad87edac98804 (diff)
downloadqemu-92323c8c2566b8ea4cdfe8e72a22d2651b0ee6af.zip
qemu-92323c8c2566b8ea4cdfe8e72a22d2651b0ee6af.tar.gz
qemu-92323c8c2566b8ea4cdfe8e72a22d2651b0ee6af.tar.bz2
hw/block/nvme: fix Close Zone
Implicitly and Explicitly Open zones can be closed by Close Zone management function. This got broken by a recent commit ("hw/block/nvme: refactor zone resource management") and now such commands fail with Invalid Zone State Transition status. Modify nvm_zrm_close() function to make Close Zone work correctly. Signed-off-by: Dmitry Fomichev <dmitry.fomichev@wdc.com> Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
Diffstat (limited to 'hw/block/nvme.c')
-rw-r--r--hw/block/nvme.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/hw/block/nvme.c b/hw/block/nvme.c
index ab4723f..56ef07b 100644
--- a/hw/block/nvme.c
+++ b/hw/block/nvme.c
@@ -1319,14 +1319,13 @@ static uint16_t nvme_zrm_finish(NvmeNamespace *ns, NvmeZone *zone)
static uint16_t nvme_zrm_close(NvmeNamespace *ns, NvmeZone *zone)
{
switch (nvme_get_zone_state(zone)) {
- case NVME_ZONE_STATE_CLOSED:
- return NVME_SUCCESS;
-
case NVME_ZONE_STATE_EXPLICITLY_OPEN:
case NVME_ZONE_STATE_IMPLICITLY_OPEN:
nvme_aor_dec_open(ns);
nvme_assign_zone_state(ns, zone, NVME_ZONE_STATE_CLOSED);
/* fall through */
+ case NVME_ZONE_STATE_CLOSED:
+ return NVME_SUCCESS;
default:
return NVME_ZONE_INVAL_TRANSITION;