nvmet: remove unnecessary ctrl parameter
authorChaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Wed, 10 Mar 2021 01:16:32 +0000 (17:16 -0800)
committerChristoph Hellwig <hch@lst.de>
Fri, 2 Apr 2021 16:48:27 +0000 (18:48 +0200)
The function nvmet_ctrl_find_get() accepts out pointer to nvmet_ctrl
structure. This function returns the same error value from two places
that is :- NVME_SC_CONNECT_INVALID_PARAM | NVME_SC_DNR.

Move this to the caller so we can change the return type to nvmet_ctrl.

Now that we can changed the return type, instead of taking out pointer
to the nvmet_ctrl structure remove that function parameter and return
the valid nvmet_ctrl pointer on success and NULL on failure.

Also, add and rename the goto labels for more readability with comments.

Signed-off-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
drivers/nvme/target/core.c
drivers/nvme/target/fabrics-cmd.c
drivers/nvme/target/nvmet.h

index 2f0213b..adbede9 100644 (file)
@@ -1178,19 +1178,19 @@ static void nvmet_init_cap(struct nvmet_ctrl *ctrl)
        ctrl->cap |= NVMET_QUEUE_SIZE - 1;
 }
 
-u16 nvmet_ctrl_find_get(const char *subsysnqn, const char *hostnqn, u16 cntlid,
-               struct nvmet_req *req, struct nvmet_ctrl **ret)
+struct nvmet_ctrl *nvmet_ctrl_find_get(const char *subsysnqn,
+                                      const char *hostnqn, u16 cntlid,
+                                      struct nvmet_req *req)
 {
+       struct nvmet_ctrl *ctrl = NULL;
        struct nvmet_subsys *subsys;
-       struct nvmet_ctrl *ctrl;
-       u16 status = 0;
 
        subsys = nvmet_find_get_subsys(req->port, subsysnqn);
        if (!subsys) {
                pr_warn("connect request for invalid subsystem %s!\n",
                        subsysnqn);
                req->cqe->result.u32 = IPO_IATTR_CONNECT_DATA(subsysnqn);
-               return NVME_SC_CONNECT_INVALID_PARAM | NVME_SC_DNR;
+               goto out;
        }
 
        mutex_lock(&subsys->lock);
@@ -1203,20 +1203,21 @@ u16 nvmet_ctrl_find_get(const char *subsysnqn, const char *hostnqn, u16 cntlid,
                        if (!kref_get_unless_zero(&ctrl->ref))
                                continue;
 
-                       *ret = ctrl;
-                       goto out;
+                       /* ctrl found */
+                       goto found;
                }
        }
 
+       ctrl = NULL; /* ctrl not found */
        pr_warn("could not find controller %d for subsys %s / host %s\n",
                cntlid, subsysnqn, hostnqn);
        req->cqe->result.u32 = IPO_IATTR_CONNECT_DATA(cntlid);
-       status = NVME_SC_CONNECT_INVALID_PARAM | NVME_SC_DNR;
 
-out:
+found:
        mutex_unlock(&subsys->lock);
        nvmet_subsys_put(subsys);
-       return status;
+out:
+       return ctrl;
 }
 
 u16 nvmet_check_ctrl_status(struct nvmet_req *req)
index d2289aa..1420a8e 100644 (file)
@@ -218,7 +218,7 @@ static void nvmet_execute_io_connect(struct nvmet_req *req)
 {
        struct nvmf_connect_command *c = &req->cmd->connect;
        struct nvmf_connect_data *d;
-       struct nvmet_ctrl *ctrl = NULL;
+       struct nvmet_ctrl *ctrl;
        u16 qid = le16_to_cpu(c->qid);
        u16 status = 0;
 
@@ -245,11 +245,12 @@ static void nvmet_execute_io_connect(struct nvmet_req *req)
                goto out;
        }
 
-       status = nvmet_ctrl_find_get(d->subsysnqn, d->hostnqn,
-                                    le16_to_cpu(d->cntlid),
-                                    req, &ctrl);
-       if (status)
+       ctrl = nvmet_ctrl_find_get(d->subsysnqn, d->hostnqn,
+                                  le16_to_cpu(d->cntlid), req);
+       if (!ctrl) {
+               status = NVME_SC_CONNECT_INVALID_PARAM | NVME_SC_DNR;
                goto out;
+       }
 
        if (unlikely(qid > ctrl->subsys->max_qid)) {
                pr_warn("invalid queue id (%d)\n", qid);
index 824d06e..24e261b 100644 (file)
@@ -428,8 +428,9 @@ void nvmet_ctrl_fatal_error(struct nvmet_ctrl *ctrl);
 void nvmet_update_cc(struct nvmet_ctrl *ctrl, u32 new);
 u16 nvmet_alloc_ctrl(const char *subsysnqn, const char *hostnqn,
                struct nvmet_req *req, u32 kato, struct nvmet_ctrl **ctrlp);
-u16 nvmet_ctrl_find_get(const char *subsysnqn, const char *hostnqn, u16 cntlid,
-               struct nvmet_req *req, struct nvmet_ctrl **ret);
+struct nvmet_ctrl *nvmet_ctrl_find_get(const char *subsysnqn,
+                                      const char *hostnqn, u16 cntlid,
+                                      struct nvmet_req *req);
 void nvmet_ctrl_put(struct nvmet_ctrl *ctrl);
 u16 nvmet_check_ctrl_status(struct nvmet_req *req);