nvme-rdma: always have a valid trsvcid
authorSagi Grimberg <sagi@grimberg.me>
Fri, 19 Oct 2018 07:50:29 +0000 (00:50 -0700)
committerChristoph Hellwig <hch@lst.de>
Fri, 19 Oct 2018 12:18:34 +0000 (14:18 +0200)
If not passed, we set the default trsvcid. We can rely on having trsvcid
and can simplify the controller matching logic.

Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
Signed-off-by: Christoph Hellwig <hch@lst.de>
drivers/nvme/host/rdma.c

index e7be903041a85afc4d8c67e6d665f31dda884a3c..03fff72b96f196bdcaab21e8dd5d3e5e69e497e3 100644 (file)
@@ -1860,26 +1860,11 @@ static inline bool
 __nvme_rdma_options_match(struct nvme_rdma_ctrl *ctrl,
        struct nvmf_ctrl_options *opts)
 {
-       char *stdport = __stringify(NVME_RDMA_IP_PORT);
-
-
        if (!nvmf_ctlr_matches_baseopts(&ctrl->ctrl, opts) ||
-           strcmp(opts->traddr, ctrl->ctrl.opts->traddr))
+           strcmp(opts->traddr, ctrl->ctrl.opts->traddr) ||
+           strcmp(opts->trsvcid, ctrl->ctrl.opts->trsvcid))
                return false;
 
-       if (opts->mask & NVMF_OPT_TRSVCID &&
-           ctrl->ctrl.opts->mask & NVMF_OPT_TRSVCID) {
-               if (strcmp(opts->trsvcid, ctrl->ctrl.opts->trsvcid))
-                       return false;
-       } else if (opts->mask & NVMF_OPT_TRSVCID) {
-               if (strcmp(opts->trsvcid, stdport))
-                       return false;
-       } else if (ctrl->ctrl.opts->mask & NVMF_OPT_TRSVCID) {
-               if (strcmp(stdport, ctrl->ctrl.opts->trsvcid))
-                       return false;
-       }
-       /* else, it's a match as both have stdport. Fall to next checks */
-
        /*
         * checking the local address is rough. In most cases, one
         * is not specified and the host port is selected by the stack.
@@ -1939,7 +1924,6 @@ static struct nvme_ctrl *nvme_rdma_create_ctrl(struct device *dev,
        struct nvme_rdma_ctrl *ctrl;
        int ret;
        bool changed;
-       char *port;
 
        ctrl = kzalloc(sizeof(*ctrl), GFP_KERNEL);
        if (!ctrl)
@@ -1947,15 +1931,21 @@ static struct nvme_ctrl *nvme_rdma_create_ctrl(struct device *dev,
        ctrl->ctrl.opts = opts;
        INIT_LIST_HEAD(&ctrl->list);
 
-       if (opts->mask & NVMF_OPT_TRSVCID)
-               port = opts->trsvcid;
-       else
-               port = __stringify(NVME_RDMA_IP_PORT);
+       if (!(opts->mask & NVMF_OPT_TRSVCID)) {
+               opts->trsvcid =
+                       kstrdup(__stringify(NVME_RDMA_IP_PORT), GFP_KERNEL);
+               if (!opts->trsvcid) {
+                       ret = -ENOMEM;
+                       goto out_free_ctrl;
+               }
+               opts->mask |= NVMF_OPT_TRSVCID;
+       }
 
        ret = inet_pton_with_scope(&init_net, AF_UNSPEC,
-                       opts->traddr, port, &ctrl->addr);
+                       opts->traddr, opts->trsvcid, &ctrl->addr);
        if (ret) {
-               pr_err("malformed address passed: %s:%s\n", opts->traddr, port);
+               pr_err("malformed address passed: %s:%s\n",
+                       opts->traddr, opts->trsvcid);
                goto out_free_ctrl;
        }