From mboxrd@z Thu Jan 1 00:00:00 1970 From: keith.busch@intel.com (Keith Busch) Date: Mon, 2 May 2016 11:12:08 -0600 Subject: [PATCH-4.7 3/3] NVMe: Set capacity to 0 on all unusable namespaces In-Reply-To: <1462209128-12376-1-git-send-email-keith.busch@intel.com> References: <1462209128-12376-1-git-send-email-keith.busch@intel.com> Message-ID: <1462209128-12376-4-git-send-email-keith.busch@intel.com> Set the disk capacity to 0 if unable to identify a namespace for any reason. This way revalidating detached namespaces will be deleted quicker since dirty data can't be sync'ed. Signed-off-by: Keith Busch --- drivers/nvme/host/core.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index 9f1f318..b9de770 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c @@ -771,31 +771,27 @@ static void nvme_config_discard(struct nvme_ns *ns) static int nvme_revalidate_disk(struct gendisk *disk) { struct nvme_ns *ns = disk->private_data; - struct nvme_id_ns *id; + struct nvme_id_ns *id = NULL; u8 lbaf, pi_type; u16 old_ms; unsigned short bs; - if (test_bit(NVME_NS_DEAD, &ns->flags)) { - set_capacity(disk, 0); - return -ENODEV; - } + if (test_bit(NVME_NS_DEAD, &ns->flags)) + goto no_dev; + if (nvme_identify_ns(ns->ctrl, ns->ns_id, &id)) { dev_warn(disk_to_dev(ns->disk), "%s: Identify failure\n", __func__); - return -ENODEV; - } - if (id->ncap == 0) { - kfree(id); - return -ENODEV; + goto no_dev; } + if (id->ncap == 0) + goto no_dev; if (nvme_nvm_ns_supported(ns, id) && ns->type != NVME_NS_LIGHTNVM) { if (nvme_nvm_register(ns->queue, disk->disk_name)) { dev_warn(disk_to_dev(ns->disk), "%s: LightNVM init failure\n", __func__); - kfree(id); - return -ENODEV; + goto no_dev; } ns->type = NVME_NS_LIGHTNVM; } @@ -845,6 +841,10 @@ static int nvme_revalidate_disk(struct gendisk *disk) kfree(id); return 0; + no_dev: + kfree(id); + set_capacity(disk, 0); + return -ENODEV; } static char nvme_pr_type(enum pr_type type) -- 2.7.2