[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20251124063203.1692144-8-yukuai@fnnas.com>
Date: Mon, 24 Nov 2025 14:31:59 +0800
From: Yu Kuai <yukuai@...as.com>
To: song@...nel.org,
linux-raid@...r.kernel.org
Cc: linux-kernel@...r.kernel.org,
filippo@...ian.org,
colyli@...as.com,
yukuai@...as.com
Subject: [PATCH v2 07/11] md: add a helper md_config_align_limits()
This helper will be used by personalities that want to align bio to
io_opt to get best IO bandwidth.
Also add the new flag to UNSUPPORTED_MDDEV_FLAGS for now, following
patches will enable this for personalities.
Signed-off-by: Yu Kuai <yukuai@...as.com>
---
drivers/md/md.h | 11 +++++++++++
drivers/md/raid0.c | 3 ++-
drivers/md/raid1.c | 3 ++-
drivers/md/raid5.c | 3 ++-
4 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/drivers/md/md.h b/drivers/md/md.h
index e7aba83b708b..ddf989f2a139 100644
--- a/drivers/md/md.h
+++ b/drivers/md/md.h
@@ -1091,6 +1091,17 @@ static inline bool rdev_blocked(struct md_rdev *rdev)
return false;
}
+static inline void md_config_align_limits(struct mddev *mddev,
+ struct queue_limits *lim)
+{
+ if ((lim->max_hw_sectors << 9) < lim->io_opt)
+ lim->max_hw_sectors = lim->io_opt >> 9;
+ else
+ lim->max_hw_sectors = rounddown(lim->max_hw_sectors,
+ lim->io_opt >> 9);
+ set_bit(MD_BIO_ALIGN, &mddev->flags);
+}
+
#define mddev_add_trace_msg(mddev, fmt, args...) \
do { \
if (!mddev_is_dm(mddev)) \
diff --git a/drivers/md/raid0.c b/drivers/md/raid0.c
index bf1f3ab59c83..01cce0c3eab7 100644
--- a/drivers/md/raid0.c
+++ b/drivers/md/raid0.c
@@ -29,7 +29,8 @@ module_param(default_layout, int, 0644);
(1L << MD_HAS_PPL) | \
(1L << MD_HAS_MULTIPLE_PPLS) | \
(1L << MD_FAILLAST_DEV) | \
- (1L << MD_SERIALIZE_POLICY))
+ (1L << MD_SERIALIZE_POLICY) | \
+ (1L << MD_BIO_ALIGN))
/*
* inform the user of the raid configuration
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
index f4c7004888af..1a957dba2640 100644
--- a/drivers/md/raid1.c
+++ b/drivers/md/raid1.c
@@ -42,7 +42,8 @@
((1L << MD_HAS_JOURNAL) | \
(1L << MD_JOURNAL_CLEAN) | \
(1L << MD_HAS_PPL) | \
- (1L << MD_HAS_MULTIPLE_PPLS))
+ (1L << MD_HAS_MULTIPLE_PPLS) | \
+ (1L << MD_BIO_ALIGN))
static void allow_barrier(struct r1conf *conf, sector_t sector_nr);
static void lower_barrier(struct r1conf *conf, sector_t sector_nr);
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
index cd0eff2f69b4..0b607aa5963e 100644
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
@@ -59,7 +59,8 @@
#define UNSUPPORTED_MDDEV_FLAGS \
((1L << MD_FAILFAST_SUPPORTED) | \
(1L << MD_FAILLAST_DEV) | \
- (1L << MD_SERIALIZE_POLICY))
+ (1L << MD_SERIALIZE_POLICY) | \
+ (1L << MD_BIO_ALIGN))
#define cpu_to_group(cpu) cpu_to_node(cpu)
--
2.51.0
Powered by blists - more mailing lists