nvme: factor out a nvme_validate_passthru_nsid helper
authorChaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Mon, 7 Jun 2021 19:54:50 +0000 (12:54 -0700)
committerChristoph Hellwig <hch@lst.de>
Wed, 16 Jun 2021 03:36:16 +0000 (05:36 +0200)
Add a helper nvme_validate_passthru_nsid() to validate the nsid that
removes the nsid validation and error message print code from
nvme_user_cmd() and nvme_user_cmd64().

Signed-off-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
drivers/nvme/host/ioctl.c

index 2e7780e..d93928d 100644 (file)
@@ -177,6 +177,20 @@ static int nvme_submit_io(struct nvme_ns *ns, struct nvme_user_io __user *uio)
                        metadata, meta_len, lower_32_bits(io.slba), NULL, 0);
 }
 
+static bool nvme_validate_passthru_nsid(struct nvme_ctrl *ctrl,
+                                       struct nvme_ns *ns, __u32 nsid)
+{
+       if (ns && nsid != ns->head->ns_id) {
+               dev_err(ctrl->device,
+                       "%s: nsid (%u) in cmd does not match nsid (%u)"
+                       "of namespace\n",
+                       current->comm, nsid, ns->head->ns_id);
+               return false;
+       }
+
+       return true;
+}
+
 static int nvme_user_cmd(struct nvme_ctrl *ctrl, struct nvme_ns *ns,
                        struct nvme_passthru_cmd __user *ucmd)
 {
@@ -192,12 +206,8 @@ static int nvme_user_cmd(struct nvme_ctrl *ctrl, struct nvme_ns *ns,
                return -EFAULT;
        if (cmd.flags)
                return -EINVAL;
-       if (ns && cmd.nsid != ns->head->ns_id) {
-               dev_err(ctrl->device,
-                       "%s: nsid (%u) in cmd does not match nsid (%u) of namespace\n",
-                       current->comm, cmd.nsid, ns->head->ns_id);
+       if (!nvme_validate_passthru_nsid(ctrl, ns, cmd.nsid))
                return -EINVAL;
-       }
 
        memset(&c, 0, sizeof(c));
        c.common.opcode = cmd.opcode;
@@ -242,12 +252,8 @@ static int nvme_user_cmd64(struct nvme_ctrl *ctrl, struct nvme_ns *ns,
                return -EFAULT;
        if (cmd.flags)
                return -EINVAL;
-       if (ns && cmd.nsid != ns->head->ns_id) {
-               dev_err(ctrl->device,
-                       "%s: nsid (%u) in cmd does not match nsid (%u) of namespace\n",
-                       current->comm, cmd.nsid, ns->head->ns_id);
+       if (!nvme_validate_passthru_nsid(ctrl, ns, cmd.nsid))
                return -EINVAL;
-       }
 
        memset(&c, 0, sizeof(c));
        c.common.opcode = cmd.opcode;