[dm-devel] [PATCH] block: revert to using min_not_zero() when stacking chunk_sectors
Mike Snitzer
snitzer at redhat.com
Mon Nov 30 17:18:05 UTC 2020
chunk_sectors must reflect the most limited of all devices in the IO
stack.
Otherwise malformed IO may result. E.g.: prior to this fix,
->chunk_sectors = lcm_not_zero(8, 128) would result in
blk_max_size_offset() splitting IO at 128 sectors rather than the
required more restrictive 8 sectors.
Fixes: 22ada802ede8 ("block: use lcm_not_zero() when stacking chunk_sectors")
Cc: stable at vger.kernel.org
Reported-by: John Dorminy <jdorminy at redhat.com>
Reported-by: Bruce Johnston <bjohnsto at redhat.com>
Signed-off-by: Mike Snitzer <snitzer at redhat.com>
---
block/blk-settings.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/block/blk-settings.c b/block/blk-settings.c
index 9741d1d83e98..1d9decd4646e 100644
--- a/block/blk-settings.c
+++ b/block/blk-settings.c
@@ -547,7 +547,10 @@ int blk_stack_limits(struct queue_limits *t, struct queue_limits *b,
t->io_min = max(t->io_min, b->io_min);
t->io_opt = lcm_not_zero(t->io_opt, b->io_opt);
- t->chunk_sectors = lcm_not_zero(t->chunk_sectors, b->chunk_sectors);
+
+ if (b->chunk_sectors)
+ t->chunk_sectors = min_not_zero(t->chunk_sectors,
+ b->chunk_sectors);
/* Physical block size a multiple of the logical block size? */
if (t->physical_block_size & (t->logical_block_size - 1)) {
--
2.15.0
More information about the dm-devel
mailing list