From: javier@javigon.com To: linux-nvme@lists.infradead.org Cc: linux-block@vger.kernel.org, hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, axboe@kernel.dk, joshi.k@samsung.com, k.jensen@samsung.com, Niklas.Cassel@wdc.com, "Javier González" <javier.gonz@samsung.com> Subject: [V5] nvme: enable ro namespace for ZNS without append Date: Tue, 1 Dec 2020 13:02:21 +0100 [thread overview] Message-ID: <20201201120221.29279-1-javier.gonz@samsung.com> (raw) From: Javier González <javier.gonz@samsung.com> Allow ZNS NVMe SSDs to present a read-only namespace when append is not supported, instead of rejecting the namespace directly. This allows (i) the namespace to be used in read-only mode, which is not a problem as the append command only affects the write path, and (ii) to use standard management tools such as nvme-cli to choose a different format or firmware slot that is compatible with the Linux zoned block device. This patch includes comments from Christoph, Niklas and Keith that applied to a different approach setting capacity to 0 https://www.spinics.net/lists/linux-block/msg60747.html The reminder of the original patch will be submitted separately. Changes since V4: - Revert re-reading effects to page. Wait for patches from Christoph on RO flag refactoring that allow to clear the flags. Changes since V3: - Force re-reading effects log page (from Keith) - Pending proper refresh of RO flag - dependency on patch from Christoph Changes since V2: - Fix small conflict with a queued patch from Sagi (from Christoph) - Fix indentation (from Niklas) - Refresh effects log page to account for FW changes (from Keith) Changes since V1: - Change logic to use NVME_NS_ATTR_RO (from Christoph) - Set max_zone_append egen in RO. This allows the device to be properly revalidated and enables user-space tools such as blkzone to be used when interacting with this zoned device. Signed-off-by: Javier González <javier.gonz@samsung.com> --- drivers/nvme/host/core.c | 2 +- drivers/nvme/host/nvme.h | 1 + drivers/nvme/host/zns.c | 14 +++++++++----- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index f42ed266bd7f..49ba21e89467 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c @@ -2113,7 +2113,7 @@ static void nvme_update_disk_info(struct gendisk *disk, nvme_config_discard(disk, ns); nvme_config_write_zeroes(disk, ns); - if (id->nsattr & NVME_NS_ATTR_RO) + if (id->nsattr & NVME_NS_ATTR_RO || test_bit(NVME_NS_FORCE_RO, &ns->flags)) set_disk_ro(disk, true); } diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h index ae017f727798..bfcedfa4b057 100644 --- a/drivers/nvme/host/nvme.h +++ b/drivers/nvme/host/nvme.h @@ -452,6 +452,7 @@ struct nvme_ns { #define NVME_NS_REMOVING 0 #define NVME_NS_DEAD 1 #define NVME_NS_ANA_PENDING 2 +#define NVME_NS_FORCE_RO 3 struct nvme_fault_inject fault_inject; diff --git a/drivers/nvme/host/zns.c b/drivers/nvme/host/zns.c index 67e87e9f306f..c2b557452483 100644 --- a/drivers/nvme/host/zns.c +++ b/drivers/nvme/host/zns.c @@ -55,12 +55,16 @@ int nvme_update_zone_info(struct nvme_ns *ns, unsigned lbaf) int status; /* Driver requires zone append support */ - if (!(le32_to_cpu(log->iocs[nvme_cmd_zone_append]) & - NVME_CMD_EFFECTS_CSUPP)) { + if ((le32_to_cpu(log->iocs[nvme_cmd_zone_append]) & NVME_CMD_EFFECTS_CSUPP)) { + if (test_and_clear_bit(NVME_NS_FORCE_RO, &ns->flags)) + dev_warn(ns->ctrl->device, + "append supported for zoned namespace:%d. Remove read-only mode\n", + ns->head->ns_id); + } else { + set_bit(NVME_NS_FORCE_RO, &ns->flags); dev_warn(ns->ctrl->device, - "append not supported for zoned namespace:%d\n", - ns->head->ns_id); - return -EINVAL; + "append not supported for zoned namespace:%d. Forcing to read-only mode\n", + ns->head->ns_id); } /* Lazily query controller append limit for the first zoned namespace */ -- 2.17.1
WARNING: multiple messages have this Message-ID (diff)
From: javier@javigon.com To: linux-nvme@lists.infradead.org Cc: axboe@kernel.dk, Niklas.Cassel@wdc.com, sagi@grimberg.me, joshi.k@samsung.com, k.jensen@samsung.com, linux-block@vger.kernel.org, kbusch@kernel.org, "Javier González" <javier.gonz@samsung.com>, hch@lst.de Subject: [V5] nvme: enable ro namespace for ZNS without append Date: Tue, 1 Dec 2020 13:02:21 +0100 [thread overview] Message-ID: <20201201120221.29279-1-javier.gonz@samsung.com> (raw) From: Javier González <javier.gonz@samsung.com> Allow ZNS NVMe SSDs to present a read-only namespace when append is not supported, instead of rejecting the namespace directly. This allows (i) the namespace to be used in read-only mode, which is not a problem as the append command only affects the write path, and (ii) to use standard management tools such as nvme-cli to choose a different format or firmware slot that is compatible with the Linux zoned block device. This patch includes comments from Christoph, Niklas and Keith that applied to a different approach setting capacity to 0 https://www.spinics.net/lists/linux-block/msg60747.html The reminder of the original patch will be submitted separately. Changes since V4: - Revert re-reading effects to page. Wait for patches from Christoph on RO flag refactoring that allow to clear the flags. Changes since V3: - Force re-reading effects log page (from Keith) - Pending proper refresh of RO flag - dependency on patch from Christoph Changes since V2: - Fix small conflict with a queued patch from Sagi (from Christoph) - Fix indentation (from Niklas) - Refresh effects log page to account for FW changes (from Keith) Changes since V1: - Change logic to use NVME_NS_ATTR_RO (from Christoph) - Set max_zone_append egen in RO. This allows the device to be properly revalidated and enables user-space tools such as blkzone to be used when interacting with this zoned device. Signed-off-by: Javier González <javier.gonz@samsung.com> --- drivers/nvme/host/core.c | 2 +- drivers/nvme/host/nvme.h | 1 + drivers/nvme/host/zns.c | 14 +++++++++----- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index f42ed266bd7f..49ba21e89467 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c @@ -2113,7 +2113,7 @@ static void nvme_update_disk_info(struct gendisk *disk, nvme_config_discard(disk, ns); nvme_config_write_zeroes(disk, ns); - if (id->nsattr & NVME_NS_ATTR_RO) + if (id->nsattr & NVME_NS_ATTR_RO || test_bit(NVME_NS_FORCE_RO, &ns->flags)) set_disk_ro(disk, true); } diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h index ae017f727798..bfcedfa4b057 100644 --- a/drivers/nvme/host/nvme.h +++ b/drivers/nvme/host/nvme.h @@ -452,6 +452,7 @@ struct nvme_ns { #define NVME_NS_REMOVING 0 #define NVME_NS_DEAD 1 #define NVME_NS_ANA_PENDING 2 +#define NVME_NS_FORCE_RO 3 struct nvme_fault_inject fault_inject; diff --git a/drivers/nvme/host/zns.c b/drivers/nvme/host/zns.c index 67e87e9f306f..c2b557452483 100644 --- a/drivers/nvme/host/zns.c +++ b/drivers/nvme/host/zns.c @@ -55,12 +55,16 @@ int nvme_update_zone_info(struct nvme_ns *ns, unsigned lbaf) int status; /* Driver requires zone append support */ - if (!(le32_to_cpu(log->iocs[nvme_cmd_zone_append]) & - NVME_CMD_EFFECTS_CSUPP)) { + if ((le32_to_cpu(log->iocs[nvme_cmd_zone_append]) & NVME_CMD_EFFECTS_CSUPP)) { + if (test_and_clear_bit(NVME_NS_FORCE_RO, &ns->flags)) + dev_warn(ns->ctrl->device, + "append supported for zoned namespace:%d. Remove read-only mode\n", + ns->head->ns_id); + } else { + set_bit(NVME_NS_FORCE_RO, &ns->flags); dev_warn(ns->ctrl->device, - "append not supported for zoned namespace:%d\n", - ns->head->ns_id); - return -EINVAL; + "append not supported for zoned namespace:%d. Forcing to read-only mode\n", + ns->head->ns_id); } /* Lazily query controller append limit for the first zoned namespace */ -- 2.17.1 _______________________________________________ Linux-nvme mailing list Linux-nvme@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-nvme
next reply other threads:[~2020-12-01 12:03 UTC|newest] Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-12-01 12:02 javier [this message] 2020-12-01 12:02 ` [V5] nvme: enable ro namespace for ZNS without append javier 2020-12-01 19:35 ` Christoph Hellwig 2020-12-01 19:35 ` Christoph Hellwig
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20201201120221.29279-1-javier.gonz@samsung.com \ --to=javier@javigon.com \ --cc=Niklas.Cassel@wdc.com \ --cc=axboe@kernel.dk \ --cc=hch@lst.de \ --cc=javier.gonz@samsung.com \ --cc=joshi.k@samsung.com \ --cc=k.jensen@samsung.com \ --cc=kbusch@kernel.org \ --cc=linux-block@vger.kernel.org \ --cc=linux-nvme@lists.infradead.org \ --cc=sagi@grimberg.me \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.