[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 03/11] hw/block/nvme: fix zone management receive reporting too ma
From: |
Klaus Jensen |
Subject: |
[PULL 03/11] hw/block/nvme: fix zone management receive reporting too many zones |
Date: |
Tue, 16 Mar 2021 22:47:45 +0100 |
From: Klaus Jensen <k.jensen@samsung.com>
nvme_zone_mgmt_recv uses nvme_ns_nlbas() to get the number of LBAs in
the namespace and then calculates the number of zones to report by
incrementing slba with ZSZE until exceeding the number of LBAs as
returned by nvme_ns_nlbas().
This is bad because the namespace might be of such as size that some
LBAs are valid, but are not part of any zone, causing zone management
receive to report one additional (but non-existing) zone.
Fix this with a conventional loop on i < ns->num_zones instead.
Fixes: a479335bfaf3 ("hw/block/nvme: Support Zoned Namespace Command Set")
Cc: Dmitry Fomichev <dmitry.fomichev@wdc.com>
Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
---
hw/block/nvme.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/hw/block/nvme.c b/hw/block/nvme.c
index 0d9b980151ae..9a14c5f7035e 100644
--- a/hw/block/nvme.c
+++ b/hw/block/nvme.c
@@ -2620,12 +2620,13 @@ static uint16_t nvme_zone_mgmt_recv(NvmeCtrl *n,
NvmeRequest *req)
uint32_t zone_idx, zra, zrasf, partial;
uint64_t max_zones, nr_zones = 0;
uint16_t status;
- uint64_t slba, capacity = nvme_ns_nlbas(ns);
+ uint64_t slba;
NvmeZoneDescr *z;
NvmeZone *zone;
NvmeZoneReportHeader *header;
void *buf, *buf_p;
size_t zone_entry_sz;
+ int i;
req->status = NVME_SUCCESS;
@@ -2667,7 +2668,7 @@ static uint16_t nvme_zone_mgmt_recv(NvmeCtrl *n,
NvmeRequest *req)
buf = g_malloc0(data_size);
zone = &ns->zone_array[zone_idx];
- for (; slba < capacity; slba += ns->zone_size) {
+ for (i = zone_idx; i < ns->num_zones; i++) {
if (partial && nr_zones >= max_zones) {
break;
}
--
2.30.1
- [PULL 00/11] emulated nvme updates and fixes, Klaus Jensen, 2021/03/16
- [PULL 01/11] hw/block/nvme: fix potential overflow, Klaus Jensen, 2021/03/16
- [PULL 02/11] hw/block/nvme: assert namespaces array indices, Klaus Jensen, 2021/03/16
- [PULL 03/11] hw/block/nvme: fix zone management receive reporting too many zones,
Klaus Jensen <=
- [PULL 07/11] hw/block/nvme: add non-mdts command size limit for verify, Klaus Jensen, 2021/03/16
- [PULL 04/11] hw/block/nvme: add metadata support, Klaus Jensen, 2021/03/16
- [PULL 06/11] hw/block/nvme: add verify command, Klaus Jensen, 2021/03/16
- [PULL 05/11] hw/block/nvme: end-to-end data protection, Klaus Jensen, 2021/03/16
- [PULL 08/11] hw/block/nvme: support multiple lba formats, Klaus Jensen, 2021/03/16
- [PULL 09/11] hw/block/nvme: prefer runtime helpers instead of device parameters, Klaus Jensen, 2021/03/16
- [PULL 10/11] hw/block/nvme: pull lba format initialization, Klaus Jensen, 2021/03/16
- [PULL 11/11] hw/block/nvme: add support for the format nvm command, Klaus Jensen, 2021/03/16
- Re: [PULL 00/11] emulated nvme updates and fixes, Peter Maydell, 2021/03/18