[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20250605150857.4061971-4-john.g.garry@oracle.com>
Date: Thu, 5 Jun 2025 15:08:56 +0000
From: John Garry <john.g.garry@...cle.com>
To: agk@...hat.com, snitzer@...nel.org, mpatocka@...hat.com, song@...nel.org,
yukuai3@...wei.com, hch@....de, nilay@...ux.ibm.com, axboe@...nel.dk
Cc: dm-devel@...ts.linux.dev, linux-kernel@...r.kernel.org,
linux-raid@...r.kernel.org, linux-block@...r.kernel.org,
ojaswin@...ux.ibm.com, martin.petersen@...cle.com,
John Garry <john.g.garry@...cle.com>
Subject: [PATCH RFC 3/4] dm-stripe: limit chunk_sectors to the stripe size
Currently we use min io size as the chunk size when deciding on the limit
of atomic write size.
Using min io size is not reliable, as this may be mutated when stacking
the bottom device limits.
The block stacking limits will rely on chunk_sectors in future, so set
this value (to the chunk size).
Introduce a flag - DM_TARGET_STRIPED - and check this in
dm_set_device_limits() when setting this limit.
Signed-off-by: John Garry <john.g.garry@...cle.com>
---
drivers/md/dm-stripe.c | 3 ++-
drivers/md/dm-table.c | 4 ++++
include/linux/device-mapper.h | 3 +++
3 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/drivers/md/dm-stripe.c b/drivers/md/dm-stripe.c
index a7dc04bd55e5..c30df6715149 100644
--- a/drivers/md/dm-stripe.c
+++ b/drivers/md/dm-stripe.c
@@ -466,7 +466,8 @@ static struct target_type stripe_target = {
.name = "striped",
.version = {1, 7, 0},
.features = DM_TARGET_PASSES_INTEGRITY | DM_TARGET_NOWAIT |
- DM_TARGET_ATOMIC_WRITES | DM_TARGET_PASSES_CRYPTO,
+ DM_TARGET_ATOMIC_WRITES | DM_TARGET_PASSES_CRYPTO |
+ DM_TARGET_STRIPED,
.module = THIS_MODULE,
.ctr = stripe_ctr,
.dtr = stripe_dtr,
diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c
index 24a857ff6d0b..4f1f7173740c 100644
--- a/drivers/md/dm-table.c
+++ b/drivers/md/dm-table.c
@@ -430,6 +430,10 @@ static int dm_set_device_limits(struct dm_target *ti, struct dm_dev *dev,
return 0;
}
+ /* For striped types, limit the chunk_sectors to the chunk size */
+ if (dm_target_supports_striped(ti->type))
+ limits->chunk_sectors = len >> SECTOR_SHIFT;
+
mutex_lock(&q->limits_lock);
/*
* BLK_FEAT_ATOMIC_WRITES is not inherited from the bottom device in
diff --git a/include/linux/device-mapper.h b/include/linux/device-mapper.h
index cb95951547ab..a863523b69ee 100644
--- a/include/linux/device-mapper.h
+++ b/include/linux/device-mapper.h
@@ -309,6 +309,9 @@ struct target_type {
#define DM_TARGET_ATOMIC_WRITES 0x00000400
#define dm_target_supports_atomic_writes(type) ((type)->features & DM_TARGET_ATOMIC_WRITES)
+#define DM_TARGET_STRIPED 0x00000800
+#define dm_target_supports_striped(type) ((type)->features & DM_TARGET_STRIPED)
+
struct dm_target {
struct dm_table *table;
struct target_type *type;
--
2.31.1
Powered by blists - more mailing lists