[PATCH] nvme: split nvme_update_zone_info
Kanchan Joshi
joshi.k at samsung.com
Thu Mar 28 03:23:10 PDT 2024
On 3/28/2024 11:50 AM, Christoph Hellwig wrote:
> nvme_update_zone_info does (admin queue) I/O to the device and can fail.
> We fail to abort the queue limits update if that happen, but really
> should avoid with the frozen I/O queue as much as possible anyway.
>
> Split the logic into a helper to query the information that can be
> called on an unfrozen queue and one to apply it to the queue limits.
>
> Fixes: 9b130d681443 ("nvme: use the atomic queue limits update API")
> Reported-by: Kanchan Joshi <joshi.k at samsung.com>
> Signed-off-by: Christoph Hellwig <hch at lst.de>
> ---
> drivers/nvme/host/core.c | 17 ++++++++++-------
> drivers/nvme/host/nvme.h | 12 ++++++++++--
> drivers/nvme/host/zns.c | 33 ++++++++++++++++++++-------------
> 3 files changed, 40 insertions(+), 22 deletions(-)
>
> diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
> index 943d72bdd794ca..5d312adca06e57 100644
> --- a/drivers/nvme/host/core.c
> +++ b/drivers/nvme/host/core.c
> @@ -2076,6 +2076,7 @@ static int nvme_update_ns_info_block(struct nvme_ns *ns,
> bool vwc = ns->ctrl->vwc & NVME_CTRL_VWC_PRESENT;
> struct queue_limits lim;
> struct nvme_id_ns_nvm *nvm = NULL;
> + struct nvme_zone_info zi = {};
> struct nvme_id_ns *id;
> sector_t capacity;
> unsigned lbaf;
> @@ -2098,6 +2099,13 @@ static int nvme_update_ns_info_block(struct nvme_ns *ns,
> goto out;
> }
>
> + if (IS_ENABLED(CONFIG_BLK_DEV_ZONED) &&
> + ns->head->ids.csi == NVME_CSI_ZNS) {
> + ret = nvme_query_zone_info(ns, lbaf, &zi);
lbaf is garbage at this point.
More information about the Linux-nvme
mailing list