mirror of https://gitee.com/openkylin/qemu.git
hw/block/nvme: move zoned constraints checks
Validation of the max_active and max_open zoned parameters are independent of any other state, so move them to the early nvme_ns_check_constraints parameter checks. Signed-off-by: Klaus Jensen <k.jensen@samsung.com> Reviewed-by: Keith Busch <kbusch@kernel.org>
This commit is contained in:
parent
83e85b614d
commit
49ad39c55a
|
@ -210,30 +210,6 @@ static int nvme_ns_zoned_check_calc_geometry(NvmeNamespace *ns, Error **errp)
|
|||
return -1;
|
||||
}
|
||||
|
||||
if (ns->params.max_active_zones) {
|
||||
if (ns->params.max_open_zones > ns->params.max_active_zones) {
|
||||
error_setg(errp, "max_open_zones (%u) exceeds max_active_zones (%u)",
|
||||
ns->params.max_open_zones, ns->params.max_active_zones);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!ns->params.max_open_zones) {
|
||||
ns->params.max_open_zones = ns->params.max_active_zones;
|
||||
}
|
||||
}
|
||||
|
||||
if (ns->params.zd_extension_size) {
|
||||
if (ns->params.zd_extension_size & 0x3f) {
|
||||
error_setg(errp,
|
||||
"zone descriptor extension size must be a multiple of 64B");
|
||||
return -1;
|
||||
}
|
||||
if ((ns->params.zd_extension_size >> 6) > 0xff) {
|
||||
error_setg(errp, "zone descriptor extension size is too large");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -403,6 +379,34 @@ static int nvme_ns_check_constraints(NvmeCtrl *n, NvmeNamespace *ns,
|
|||
}
|
||||
}
|
||||
|
||||
if (ns->params.zoned) {
|
||||
if (ns->params.max_active_zones) {
|
||||
if (ns->params.max_open_zones > ns->params.max_active_zones) {
|
||||
error_setg(errp, "max_open_zones (%u) exceeds "
|
||||
"max_active_zones (%u)", ns->params.max_open_zones,
|
||||
ns->params.max_active_zones);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!ns->params.max_open_zones) {
|
||||
ns->params.max_open_zones = ns->params.max_active_zones;
|
||||
}
|
||||
}
|
||||
|
||||
if (ns->params.zd_extension_size) {
|
||||
if (ns->params.zd_extension_size & 0x3f) {
|
||||
error_setg(errp, "zone descriptor extension size must be a "
|
||||
"multiple of 64B");
|
||||
return -1;
|
||||
}
|
||||
if ((ns->params.zd_extension_size >> 6) > 0xff) {
|
||||
error_setg(errp,
|
||||
"zone descriptor extension size is too large");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue