summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Busch <kbusch@kernel.org>2026-03-25 22:36:08 +0300
committerMikulas Patocka <mpatocka@redhat.com>2026-03-28 00:19:17 +0300
commit33eded29319d41fcba5d0257b126a48b449aad47 (patch)
treefbe0cb9ebb96782c55c56172636d6a2c2b66a844
parentcbc1532d2b0ec2a842bd459f01b590bbf16b7443 (diff)
downloadlinux-33eded29319d41fcba5d0257b126a48b449aad47.tar.xz
dm: provide helper to set stacked limits
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>
-rw-r--r--drivers/md/dm-crypt.c6
-rw-r--r--drivers/md/dm-integrity.c7
-rw-r--r--drivers/md/dm-verity-target.c8
-rw-r--r--drivers/md/dm-writecache.c10
-rw-r--r--include/linux/device-mapper.h7
5 files changed, 11 insertions, 27 deletions
diff --git a/drivers/md/dm-crypt.c b/drivers/md/dm-crypt.c
index 885208a82c55..60642cee8609 100644
--- a/drivers/md/dm-crypt.c
+++ b/drivers/md/dm-crypt.c
@@ -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;
/*
diff --git a/drivers/md/dm-integrity.c b/drivers/md/dm-integrity.c
index d64c15c761d0..65c30dec8222 100644
--- a/drivers/md/dm-integrity.c
+++ b/drivers/md/dm-integrity.c
@@ -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;
diff --git a/drivers/md/dm-verity-target.c b/drivers/md/dm-verity-target.c
index e1d435c79e96..9a9847f94c46 100644
--- a/drivers/md/dm-verity-target.c
+++ b/drivers/md/dm-verity-target.c
@@ -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
diff --git a/drivers/md/dm-writecache.c b/drivers/md/dm-writecache.c
index 98bd945f6da7..493f5202ad04 100644
--- a/drivers/md/dm-writecache.c
+++ b/drivers/md/dm-writecache.c
@@ -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);
diff --git a/include/linux/device-mapper.h b/include/linux/device-mapper.h
index 38f625af6ab4..cd4faaf5d427 100644
--- a/include/linux/device-mapper.h
+++ b/include/linux/device-mapper.h
@@ -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 */