On Sep 9 11:51, Hannes Reinecke wrote: > If a legacy 'drive' argument is passed to the controller we cannot > assume that '1' will be a free NSID, as the subsys might already > have attached a namespace to this NSID. So select the first free > one. > > Signed-off-by: Hannes Reinecke <h...@suse.de> > --- > hw/nvme/ctrl.c | 9 ++++++++- > 1 file changed, 8 insertions(+), 1 deletion(-) > > diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c > index 757cdff038..2c69031ca9 100644 > --- a/hw/nvme/ctrl.c > +++ b/hw/nvme/ctrl.c > @@ -6546,8 +6546,15 @@ static void nvme_realize(PCIDevice *pci_dev, Error > **errp) > > /* setup a namespace if the controller drive property was given */ > if (n->namespace.blkconf.blk) { > + int i; > ns = &n->namespace; > - ns->params.nsid = 1; > + for (i = 1; i <= NVME_MAX_NAMESPACES; i++) { > + if (nvme_ns(n, i) || nvme_subsys_ns(n->subsys, i)) { > + continue; > + } > + ns->params.nsid = i; > + break; > + } > > if (nvme_ns_setup(ns, errp)) { > return; > -- > 2.26.2 >
Did you actually hit this? Because then then property checking logic is bad... The device is not supposed to allow nvme,drive= combined with a subsystem property. In nvme_check_constraints(): if (n->namespace.blkconf.blk && n->subsys) { /* error out */ return; }
signature.asc
Description: PGP signature