From: Klaus Jensen Date: Tue, 12 Jan 2021 09:32:37 +0000 (+0100) Subject: hw/block/nvme: fix zone write finalize X-Git-Tag: qemu-xen-4.16.0-rc4~346^2~22 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=635b23ad43e37910eb7607cfee6887e89ae9e69a;p=qemu-xen.git hw/block/nvme: fix zone write finalize The zone write pointer is unconditionally advanced, even for write faults. Make sure that the zone is always transitioned to Full if the write pointer reaches zone capacity. Cc: Dmitry Fomichev Reviewed-by: Keith Busch Signed-off-by: Klaus Jensen --- diff --git a/hw/block/nvme.c b/hw/block/nvme.c index 30bd70fd5b..4d73398798 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -1268,10 +1268,13 @@ static void nvme_finalize_zoned_write(NvmeNamespace *ns, NvmeRequest *req, nlb = le16_to_cpu(rw->nlb) + 1; zone = nvme_get_zone_by_slba(ns, slba); + zone->d.wp += nlb; + if (failed) { res->slba = 0; - zone->d.wp += nlb; - } else if (zone->w_ptr == nvme_zone_wr_boundary(zone)) { + } + + if (zone->d.wp == nvme_zone_wr_boundary(zone)) { switch (nvme_get_zone_state(zone)) { case NVME_ZONE_STATE_IMPLICITLY_OPEN: case NVME_ZONE_STATE_EXPLICITLY_OPEN: @@ -1288,9 +1291,6 @@ static void nvme_finalize_zoned_write(NvmeNamespace *ns, NvmeRequest *req, default: assert(false); } - zone->d.wp = zone->w_ptr; - } else { - zone->d.wp += nlb; } }