FAILED: patch "[PATCH] block: use gcd() to fix chunk_sectors limit stacking" failed to apply to 5.9-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 5.9-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]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 7e7986f9d3ba69a7375a41080a1f8c8012cb0923 Mon Sep 17 00:00:00 2001
From: Mike Snitzer <[email protected]>
Date: Tue, 1 Dec 2020 11:07:09 -0500
Subject: [PATCH] block: use gcd() to fix chunk_sectors limit stacking
commit 22ada802ede8 ("block: use lcm_not_zero() when stacking chunk_sectors") broke chunk_sectors limit stacking. 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.
And since commit 07d098e6bbad ("block: allow 'chunk_sectors' to be non-power-of-2") care must be taken to properly stack chunk_sectors to be compatible with the possibility that a non-power-of-2 chunk_sectors may be stacked. This is why gcd() is used instead of reverting back to using min_not_zero().
block/blk-settings.c +4 -1
@@ -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); + +/* Set non-power-of-2 compatible chunk_sectors boundary */ +if (b->chunk_sectors) + t->chunk_sectors =gcd (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 )) {