]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
dm: provide helper to set stacked limits
authorKeith Busch <kbusch@kernel.org>
Wed, 25 Mar 2026 19:36:08 +0000 (12:36 -0700)
committerMikulas Patocka <mpatocka@redhat.com>
Fri, 27 Mar 2026 21:19:17 +0000 (22:19 +0100)
There are multiple device mappers that set up their stacking limits
exactly the same for the logical, physical and minimum IO queue limits.
Provide a helper for it.

Signed-off-by: Keith Busch <kbusch@kernel.org>
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
drivers/md/dm-crypt.c
drivers/md/dm-integrity.c
drivers/md/dm-verity-target.c
drivers/md/dm-writecache.c
include/linux/device-mapper.h

index 885208a82c55ff22313079a09d868f39aa413e06..60642cee8609d755d56b0391cdbad060a9130fa1 100644 (file)
@@ -3684,11 +3684,7 @@ static void crypt_io_hints(struct dm_target *ti, struct queue_limits *limits)
 {
        struct crypt_config *cc = ti->private;
 
-       limits->logical_block_size =
-               max_t(unsigned int, limits->logical_block_size, cc->sector_size);
-       limits->physical_block_size =
-               max_t(unsigned int, limits->physical_block_size, cc->sector_size);
-       limits->io_min = max_t(unsigned int, limits->io_min, cc->sector_size);
+       dm_stack_bs_limits(limits, cc->sector_size);
        limits->dma_alignment = limits->logical_block_size - 1;
 
        /*
index d64c15c761d0a4042eee527069554f98b2a3c5db..65c30dec82220375446a770376f0e8a571ac138b 100644 (file)
@@ -4046,12 +4046,7 @@ static void dm_integrity_io_hints(struct dm_target *ti, struct queue_limits *lim
 {
        struct dm_integrity_c *ic = ti->private;
 
-       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);
+       dm_stack_bs_limits(limits, ic->sectors_per_block << SECTOR_SHIFT);
        limits->dma_alignment = limits->logical_block_size - 1;
        limits->discard_granularity = ic->sectors_per_block << SECTOR_SHIFT;
 
index e1d435c79e96c9ccf169d58c30bbe392935968cc..9a9847f94c460c3ff810bc9a390b04b381a02740 100644 (file)
@@ -1011,13 +1011,7 @@ static void verity_io_hints(struct dm_target *ti, struct queue_limits *limits)
 {
        struct dm_verity *v = ti->private;
 
-       if (limits->logical_block_size < 1 << v->data_dev_block_bits)
-               limits->logical_block_size = 1 << v->data_dev_block_bits;
-
-       if (limits->physical_block_size < 1 << v->data_dev_block_bits)
-               limits->physical_block_size = 1 << v->data_dev_block_bits;
-
-       limits->io_min = limits->logical_block_size;
+       dm_stack_bs_limits(limits, 1 << v->data_dev_block_bits);
 
        /*
         * Similar to what dm-crypt does, opt dm-verity out of support for
index 98bd945f6da7b088680a12c65bb636b73c87f138..493f5202ad0426c401b2bd7784998cbd035a924a 100644 (file)
@@ -1640,17 +1640,9 @@ static void writecache_io_hints(struct dm_target *ti, struct queue_limits *limit
 {
        struct dm_writecache *wc = ti->private;
 
-       if (limits->logical_block_size < wc->block_size)
-               limits->logical_block_size = wc->block_size;
-
-       if (limits->physical_block_size < wc->block_size)
-               limits->physical_block_size = wc->block_size;
-
-       if (limits->io_min < wc->block_size)
-               limits->io_min = wc->block_size;
+       dm_stack_bs_limits(limits, wc->block_size);
 }
 
-
 static void writecache_writeback_endio(struct bio *bio)
 {
        struct writeback_struct *wb = container_of(bio, struct writeback_struct, bio);
index 38f625af6ab473560725fa34e4817f74550f4d3c..cd4faaf5d4275c038d06ccef4da3d77430154388 100644 (file)
@@ -755,4 +755,11 @@ static inline unsigned long to_bytes(sector_t n)
        return (n << SECTOR_SHIFT);
 }
 
+static inline void dm_stack_bs_limits(struct queue_limits *limits, unsigned int bs)
+{
+       limits->logical_block_size = max(limits->logical_block_size, bs);
+       limits->physical_block_size = max(limits->physical_block_size, bs);
+       limits->io_min = max(limits->io_min, bs);
+}
+
 #endif /* _LINUX_DEVICE_MAPPER_H */