summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMinwoo Im2021-01-15 13:19:20 +0100
committerKlaus Jensen2021-02-08 21:15:54 +0100
commit044f1876b0b00a970e65b99d9be21925cdd7dc6b (patch)
tree5cd61f6e8902a8f497a39670565de5fd84d7062d
parenthw/block/nvme: lift cmb restrictions (diff)
downloadqemu-044f1876b0b00a970e65b99d9be21925cdd7dc6b.tar.gz
qemu-044f1876b0b00a970e65b99d9be21925cdd7dc6b.tar.xz
qemu-044f1876b0b00a970e65b99d9be21925cdd7dc6b.zip
hw/block/nvme: error if drive less than a zone size
If a user assigns a backing device with less capacity than the size of a single zone, the namespace capacity will be reported as zero and the kernel will silently fail to allocate the namespace. This patch errors out in case that the backing device cannot accomodate at least a single zone. Signed-off-by: Minwoo Im <minwoo.im.dev@gmail.com> [k.jensen: small fixup in the error and commit message] Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
-rw-r--r--hw/block/nvme-ns.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/hw/block/nvme-ns.c b/hw/block/nvme-ns.c
index 3f52acb89c..dfed71a950 100644
--- a/hw/block/nvme-ns.c
+++ b/hw/block/nvme-ns.c
@@ -134,6 +134,13 @@ static int nvme_ns_zoned_check_calc_geometry(NvmeNamespace *ns, Error **errp)
ns->num_zones = ns->size / lbasz / ns->zone_size;
/* Do a few more sanity checks of ZNS properties */
+ if (!ns->num_zones) {
+ error_setg(errp,
+ "insufficient drive capacity, must be at least the size "
+ "of one zone (%"PRIu64"B)", zone_size);
+ return -1;
+ }
+
if (ns->params.max_open_zones > ns->num_zones) {
error_setg(errp,
"max_open_zones value %u exceeds the number of zones %u",