From: Keith Busch Date: Wed, 25 Mar 2026 19:36:06 +0000 (-0700) Subject: dm-integrity: fix mismatched queue limits X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6ebf3b6c6f16fda0568aa4207c6cd398f983c354;p=thirdparty%2Fkernel%2Fstable.git dm-integrity: fix mismatched queue limits A user can integritysetup a device with a backing device using a 4k logical block size, but request the dm device use 1k or 2k. This mismatch creates an inconsistency such that the dm device would report limits for IO that it can't actually execute. Fix this by using the backing device's limits if they are larger. Signed-off-by: Keith Busch Signed-off-by: Mikulas Patocka --- diff --git a/drivers/md/dm-integrity.c b/drivers/md/dm-integrity.c index 06e805902151..8dfd498ed1ff 100644 --- a/drivers/md/dm-integrity.c +++ b/drivers/md/dm-integrity.c @@ -4047,9 +4047,15 @@ static void dm_integrity_io_hints(struct dm_target *ti, struct queue_limits *lim struct dm_integrity_c *ic = ti->private; if (ic->sectors_per_block > 1) { - limits->logical_block_size = ic->sectors_per_block << SECTOR_SHIFT; - limits->physical_block_size = ic->sectors_per_block << SECTOR_SHIFT; - limits->io_min = ic->sectors_per_block << SECTOR_SHIFT; + limits->logical_block_size = + max(limits->logical_block_size, + ic->sectors_per_block << SECTOR_SHIFT); + limits->physical_block_size = + max(limits->physical_block_size, + ic->sectors_per_block << SECTOR_SHIFT); + limits->io_min = + max(limits->io_min, + ic->sectors_per_block << SECTOR_SHIFT); limits->dma_alignment = limits->logical_block_size - 1; limits->discard_granularity = ic->sectors_per_block << SECTOR_SHIFT; }