nvme: opencode revalidate_disk in nvme_validate_ns
authorChristoph Hellwig <hch@lst.de>
Tue, 1 Sep 2020 15:57:45 +0000 (17:57 +0200)
committerJens Axboe <axboe@kernel.dk>
Wed, 2 Sep 2020 14:00:07 +0000 (08:00 -0600)
Keep control in the NVMe driver instead of going through an indirect
call back into ->revalidate_disk.  Also reorder the function a bit to be
easier to follow with the additional code.

And now that we have removed all callers of revalidate_disk() in the nvme
code, ->revalidate_disk is only called from the open code when first
opening the device.  Which is of course totally pointless as we have
a valid size since the initial scan, and will get an updated view
through the asynchronous notifiation everytime the size changes.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/nvme/host/core.c

index c7e01d9..ea1fa41 100644 (file)
@@ -2352,7 +2352,6 @@ static const struct block_device_operations nvme_fops = {
        .open           = nvme_open,
        .release        = nvme_release,
        .getgeo         = nvme_getgeo,
-       .revalidate_disk= nvme_revalidate_disk,
        .report_zones   = nvme_report_zones,
        .pr_ops         = &nvme_pr_ops,
 };
@@ -4053,14 +4052,19 @@ static void nvme_ns_remove_by_nsid(struct nvme_ctrl *ctrl, u32 nsid)
 static void nvme_validate_ns(struct nvme_ctrl *ctrl, unsigned nsid)
 {
        struct nvme_ns *ns;
+       int ret;
 
        ns = nvme_find_get_ns(ctrl, nsid);
-       if (ns) {
-               if (revalidate_disk(ns->disk))
-                       nvme_ns_remove(ns);
-               nvme_put_ns(ns);
-       } else
+       if (!ns) {
                nvme_alloc_ns(ctrl, nsid);
+               return;
+       }
+
+       ret = nvme_revalidate_disk(ns->disk);
+       revalidate_disk_size(ns->disk, ret == 0);
+       if (ret)
+               nvme_ns_remove(ns);
+       nvme_put_ns(ns);
 }
 
 static void nvme_remove_invalid_namespaces(struct nvme_ctrl *ctrl,