On Tue, 2021-01-26 at 13:15 +0100, Klaus Jensen wrote: > From: Klaus Jensen <k.jen...@samsung.com> > > Firstly, if zoned.max_active is non-zero, zoned.max_open must be less > than or equal to zoned.max_active. > > Secondly, if only zones.max_active is set, we have to explicitly set > zones.max_open or we end up with an invalid MAR/MOR configuration. This > is an artifact of the parameters not being zeroes-based like in the > spec. > > Cc: Dmitry Fomichev <dmitry.fomic...@wdc.com> > Reported-by: Gollu Appalanaidu <anaidu.go...@samsung.com> > Signed-off-by: Klaus Jensen <k.jen...@samsung.com>
Reviewed-by: Dmitry Fomichev <dmitry.fomic...@wdc.com> > --- > > v2: > > * Jumped the gun on removing the check on zoned.max_open. It should > still be done since the device might only have a constraint on open > zones, not active. > * Instead, added an explicit set of zoned.max_open if only > zoned.max_active is specifed. > > hw/block/nvme-ns.c | 12 ++++++++++++ > 1 file changed, 12 insertions(+) > > diff --git a/hw/block/nvme-ns.c b/hw/block/nvme-ns.c > index 62b25cf69bfa..df514287b58f 100644 > --- a/hw/block/nvme-ns.c > +++ b/hw/block/nvme-ns.c > @@ -153,6 +153,18 @@ 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,