block: allow max_discard_segments to be stacked

This change “block: allow max_discard_segments to be stacked” in Linux kernel is authored by Mike Snitzer <snitzer [at]> on Fri Jul 20 14:57:38 2018 -0400.

block: allow max_discard_segments to be stacked

Set max_discard_segments to USHRT_MAX in blk_set_stacking_limits() so
that blk_stack_limits() can stack up this limit for stacked devices.


$ cat /sys/block/nvme0n1/queue/max_discard_segments
$ cat /sys/block/dm-0/queue/max_discard_segments


$ cat /sys/block/nvme0n1/queue/max_discard_segments
$ cat /sys/block/dm-0/queue/max_discard_segments

Fixes: 1e739730c5b9e ("block: optionally merge discontiguous discard bios into a single request")
Reviewed-by: Christoph Hellwig <>
Signed-off-by: Mike Snitzer <>
Signed-off-by: Jens Axboe <>

This Linux change may have been applied to various maintained Linux releases and you can find Linux releases including commit 42c9cdf.

There are 2 lines of Linux source code added/deleted in this change. Code changes to Linux kernel are as follows.

 block/blk-settings.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/block/blk-settings.c b/block/blk-settings.c
index 053de87..ffd4599 100644
--- a/block/blk-settings.c
+++ b/block/blk-settings.c
@@ -128,7 +128,7 @@ void blk_set_stacking_limits(struct queue_limits *lim)
 	/* Inherit limits from component devices */
 	lim->max_segments = USHRT_MAX;
-	lim->max_discard_segments = 1;
+	lim->max_discard_segments = USHRT_MAX;
 	lim->max_hw_sectors = UINT_MAX;
 	lim->max_segment_size = UINT_MAX;
 	lim->max_sectors = UINT_MAX;

The commit for this change in Linux stable tree is 42c9cdf (patch).

Leave a Reply

Your email address will not be published. Required fields are marked *