nvme: allow duplicate controller if prior controller being deleted
authorJames Smart <jsmart2021@gmail.com>
Fri, 25 May 2018 21:02:23 +0000 (14:02 -0700)
committerChristoph Hellwig <hch@lst.de>
Wed, 30 May 2018 06:03:23 +0000 (08:03 +0200)
The current checks for whether a new controller request "matches" an
existing controller ignores controller state and checks identity strings.
There are cases where an existing controller may be in its last steps of
deletion when they are "matched" by a new connection.

Change the behavior so that the new connection ignores controllers that
are deleted.

Signed-off-by: James Smart <james.smart@broadcom.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
drivers/nvme/host/fabrics.h

index ef46c915b7b56acadbab23b7c8837e31913efa56..0cf0460a5c921f337f05559c507a1fef73178ba2 100644 (file)
@@ -139,7 +139,9 @@ static inline bool
 nvmf_ctlr_matches_baseopts(struct nvme_ctrl *ctrl,
                        struct nvmf_ctrl_options *opts)
 {
-       if (strcmp(opts->subsysnqn, ctrl->opts->subsysnqn) ||
+       if (ctrl->state == NVME_CTRL_DELETING ||
+           ctrl->state == NVME_CTRL_DEAD ||
+           strcmp(opts->subsysnqn, ctrl->opts->subsysnqn) ||
            strcmp(opts->host->nqn, ctrl->opts->host->nqn) ||
            memcmp(&opts->host->id, &ctrl->opts->host->id, sizeof(uuid_t)))
                return false;