Skip to content

Commit 6ebf3b6

Browse files
keithbuschMikulas Patocka
authored andcommitted
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 <kbusch@kernel.org> Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
1 parent 5387815 commit 6ebf3b6

1 file changed

Lines changed: 9 additions & 3 deletions

File tree

drivers/md/dm-integrity.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4047,9 +4047,15 @@ static void dm_integrity_io_hints(struct dm_target *ti, struct queue_limits *lim
40474047
struct dm_integrity_c *ic = ti->private;
40484048

40494049
if (ic->sectors_per_block > 1) {
4050-
limits->logical_block_size = ic->sectors_per_block << SECTOR_SHIFT;
4051-
limits->physical_block_size = ic->sectors_per_block << SECTOR_SHIFT;
4052-
limits->io_min = ic->sectors_per_block << SECTOR_SHIFT;
4050+
limits->logical_block_size =
4051+
max(limits->logical_block_size,
4052+
ic->sectors_per_block << SECTOR_SHIFT);
4053+
limits->physical_block_size =
4054+
max(limits->physical_block_size,
4055+
ic->sectors_per_block << SECTOR_SHIFT);
4056+
limits->io_min =
4057+
max(limits->io_min,
4058+
ic->sectors_per_block << SECTOR_SHIFT);
40534059
limits->dma_alignment = limits->logical_block_size - 1;
40544060
limits->discard_granularity = ic->sectors_per_block << SECTOR_SHIFT;
40554061
}

0 commit comments

Comments
 (0)