FAILED: patch "[PATCH] nvme: respect NVME_QUIRK_DISABLE_WRITE_ZEROES when wzsl is" failed to apply to 5.15-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 5.15-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-5.15.y
git checkout FETCH_HEAD
git cherry-pick -x 40f0496b617b431f8d2dd94d7f785c1121f8a68a
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026050133-dipped-hedge-8292@gregkh' --subject-prefix 'PATCH 5.15.y' HEAD^..
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 40f0496b617b431f8d2dd94d7f785c1121f8a68a Mon Sep 17 00:00:00 2001
From: Robert Beckett <[email protected]>
Date: Fri, 20 Mar 2026 19:22:08 +0000
Subject: [PATCH] nvme: respect NVME_QUIRK_DISABLE_WRITE_ZEROES when wzsl is
set
The NVM Command Set Identify Controller data may report a non-zero Write Zeroes Size Limit (wzsl). When present, nvme_init_non_mdts_limits() unconditionally overrides max_zeroes_sectors from wzsl, even if NVME_QUIRK_DISABLE_WRITE_ZEROES previously set it to zero.
This effectively re-enables write zeroes for devices that need it disabled, defeating the quirk. Several Kingston OM* drives rely on this quirk to avoid firmware issues with write zeroes commands.
Check for the quirk before applying the wzsl override.
drivers/nvme/host/core.c +1 -1
@@ -3419,7 +3419,7 @@ static int nvme_init_non_mdts_limits(struct nvme_ctrl *ctrl) ctrl->dmrl = id->dmrl; ctrl->dmrsl =le32_to_cpu (id->dmrsl); -if (id->wzsl) +if (id->wzsl && !(ctrl->quirks &NVME_QUIRK_DISABLE_WRITE_ZEROES )) ctrl->max_zeroes_sectors =nvme_mps_to_sectors (ctrl, id->wzsl); free_data:
Sasha Levin
maintainerPATCH 1/2 nvme: fix interpretation of DMRSL
From: Tom Yan <[email protected]>
[ Upstream commit 1a86924e4f464757546d7f7bdc469be237918395 ]
DMRSLl is in the unit of logical blocks, while max_discard_sectors is in the unit of "linux sector".
Stable-dep-of: 40f0496b617b ("nvme: respect NVME_QUIRK_DISABLE_WRITE_ZEROES when wzsl is set")
--- drivers/nvme/host/core.c | 6 ++++-- drivers/nvme/host/nvme.h | 1 + 2 files changed, 5 insertions(+), 2 deletions(-)
drivers/nvme/host/core.c +4 -2
@@ -1736,6 +1736,9 @@ static void nvme_config_discard(struct gendisk *disk, struct nvme_ns *ns)if (blk_queue_flag_test_and_set (QUEUE_FLAG_DISCARD , queue))return ; +if (ctrl->dmrsl && ctrl->dmrsl <=nvme_sect_to_lba (ns,UINT_MAX )) + ctrl->max_discard_sectors =nvme_lba_to_sect (ns, ctrl->dmrsl); +blk_queue_max_discard_sectors (queue, ctrl->max_discard_sectors);blk_queue_max_discard_segments (queue, ctrl->max_discard_segments);
@@ -2948,8 +2951,7 @@ static int nvme_init_non_mdts_limits(struct nvme_ctrl *ctrl)if (id->dmrl) ctrl->max_discard_segments = id->dmrl; -if (id->dmrsl) - ctrl->max_discard_sectors =le32_to_cpu (id->dmrsl); + ctrl->dmrsl =le32_to_cpu (id->dmrsl);if (id->wzsl) ctrl->max_zeroes_sectors =nvme_mps_to_sectors (ctrl, id->wzsl);
drivers/nvme/host/nvme.h +1 -0
@@ -299,6 +299,7 @@ struct nvme_ctrl {#endif u16 crdt[3 ];u16 oncs; +u32 dmrsl;u16 oacs;u16 nssa;u16 nr_streams;
Signature · 1 line
2.53.0
Sasha Levin
maintainerPATCH 2/2 nvme: respect NVME_QUIRK_DISABLE_WRITE_ZEROES when wzsl is set
From: Robert Beckett <[email protected]>
[ Upstream commit 40f0496b617b431f8d2dd94d7f785c1121f8a68a ]
The NVM Command Set Identify Controller data may report a non-zero Write Zeroes Size Limit (wzsl). When present, nvme_init_non_mdts_limits() unconditionally overrides max_zeroes_sectors from wzsl, even if NVME_QUIRK_DISABLE_WRITE_ZEROES previously set it to zero.
This effectively re-enables write zeroes for devices that need it disabled, defeating the quirk. Several Kingston OM* drives rely on this quirk to avoid firmware issues with write zeroes commands.
Check for the quirk before applying the wzsl override.
--- drivers/nvme/host/core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/nvme/host/core.c +1 -1
@@ -2952,7 +2952,7 @@ static int nvme_init_non_mdts_limits(struct nvme_ctrl *ctrl)if (id->dmrl) ctrl->max_discard_segments = id->dmrl; ctrl->dmrsl =le32_to_cpu (id->dmrsl); -if (id->wzsl) +if (id->wzsl && !(ctrl->quirks &NVME_QUIRK_DISABLE_WRITE_ZEROES )) ctrl->max_zeroes_sectors =nvme_mps_to_sectors (ctrl, id->wzsl); free_data:
Signature · 1 line
2.53.0