nvme: open code nvme_put_ns_from_disk in nvme_ns_head_chr_ioctl
authorChristoph Hellwig <hch@lst.de>
Wed, 19 May 2021 07:02:59 +0000 (09:02 +0200)
committerChristoph Hellwig <hch@lst.de>
Thu, 3 Jun 2021 07:29:25 +0000 (10:29 +0300)
nvme_ns_head_chr_ioctl is always used on multipath nodes, so just call
srcu_read_unlock and consolidate the two unlock paths.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Keith Busch <kbusch@kernel.org>
Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
drivers/nvme/host/ioctl.c

index 9557ead02de10622bd708309142d3d5826031047..0341767ff2e7090e458afb8775ef8122dc8b9732 100644 (file)
@@ -419,21 +419,19 @@ long nvme_ns_head_chr_ioctl(struct file *file, unsigned int cmd,
                container_of(cdev, struct nvme_ns_head, cdev);
        void __user *argp = (void __user *)arg;
        struct nvme_ns *ns;
-       int srcu_idx, ret;
+       int srcu_idx, ret = -EWOULDBLOCK;
 
        srcu_idx = srcu_read_lock(&head->srcu);
        ns = nvme_find_path(head);
-       if (!ns) {
-               srcu_read_unlock(&head->srcu, srcu_idx);
-               return -EWOULDBLOCK;
-       }
+       if (!ns)
+               goto out_unlock;
 
        if (is_ctrl_ioctl(cmd))
                return nvme_ns_head_ctrl_ioctl(ns, cmd, argp, head, srcu_idx);
 
        ret = nvme_ns_ioctl(ns, cmd, argp);
-       nvme_put_ns_from_disk(head, srcu_idx);
-
+out_unlock:
+       srcu_read_unlock(&head->srcu, srcu_idx);
        return ret;
 }
 #endif /* CONFIG_NVME_MULTIPATH */