Message ID | 20240327172145.2844065-2-hch@lst.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/2] block: add a helper to cancel atomic queue limit updates | expand |
On Wed, Mar 27, 2024 at 06:21:45PM +0100, Christoph Hellwig wrote: > @@ -2115,6 +2115,7 @@ static int nvme_update_ns_info_block(struct nvme_ns *ns, > ns->head->ids.csi == NVME_CSI_ZNS) { > ret = nvme_update_zone_info(ns, lbaf, &lim); > if (ret) { > + queue_limits_cancel_update(ns->disk->queue); Could you instead move nvme_update_zone_info() outside the queue_limits_start_update()? That way we wouldn't need to "cancel" the update. You'd just need to save a copy of "mor" and "mar" in the ns instead of writing these directly to the queue_limits.
diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index 943d72bdd794ca..f8a9565bee41d2 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c @@ -2115,6 +2115,7 @@ static int nvme_update_ns_info_block(struct nvme_ns *ns, ns->head->ids.csi == NVME_CSI_ZNS) { ret = nvme_update_zone_info(ns, lbaf, &lim); if (ret) { + queue_limits_cancel_update(ns->disk->queue); blk_mq_unfreeze_queue(ns->disk->queue); goto out; }
Starting an atomic queue limits update takes a mutex and thus needs to be finished, or with the newly added helper, canceled to not leak the lock critical section. Fixes: 9b130d681443 ("nvme: use the atomic queue limits update API") Reported-by: Kanchan Joshi <joshi.k@samsung.com> Signed-off-by: Christoph Hellwig <hch@lst.de> --- drivers/nvme/host/core.c | 1 + 1 file changed, 1 insertion(+)