On Mon, Apr 13, 2020 at 01:13:49AM -0700, Sagi Grimberg wrote: > From: James Smart <jsmart2021@xxxxxxxxx> > > [ Upstream commit c26aa572027d438de9cc311aaebcbe972f698c24 ] > > Current code matches subnqn and collapses all controllers to the > same subnqn to a single subsystem structure. This is good for > recognizing multiple controllers for the same subsystem. But with > the well-known discovery subnqn, the subsystems aren't truly the > same subsystem. As such, subsystem specific rules, such as no > overlap of controller id, do not apply. With today's behavior, the > check for overlap of controller id can fail, preventing the new > discovery controller from being created. > > When searching for like subsystem nqn, exclude the discovery nqn > from matching. This will result in each discovery controller being > attached to a unique subsystem structure. > > Signed-off-by: James Smart <jsmart2021@xxxxxxxxx> > Reviewed-by: Sagi Grimberg <sagi@xxxxxxxxxxx> > Reviewed-by: Christoph Hellwig <hch@xxxxxx> > Reviewed-by: Max Gurtovoy <maxg@xxxxxxxxxxxx> > Signed-off-by: Sagi Grimberg <sagi@xxxxxxxxxxx> > --- > drivers/nvme/host/core.c | 11 +++++++++++ > 1 file changed, 11 insertions(+) > > diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c > index fad04282148d..0545eb97d838 100644 > --- a/drivers/nvme/host/core.c > +++ b/drivers/nvme/host/core.c > @@ -2374,6 +2374,17 @@ static struct nvme_subsystem *__nvme_find_get_subsystem(const char *subsysnqn) > > lockdep_assert_held(&nvme_subsystems_lock); > > + /* > + * Fail matches for discovery subsystems. This results > + * in each discovery controller bound to a unique subsystem. > + * This avoids issues with validating controller values > + * that can only be true when there is a single unique subsystem. > + * There may be multiple and completely independent entities > + * that provide discovery controllers. > + */ > + if (!strcmp(subsysnqn, NVME_DISC_SUBSYS_NAME)) > + return NULL; > + > list_for_each_entry(subsys, &nvme_subsystems, entry) { > if (strcmp(subsys->subnqn, subsysnqn)) > continue; > -- > 2.20.1 > Now queued up, thanks. greg k-h