* [PATCH 1/2] dm cache: drop redundant origin size check
@ 2025-12-10 3:17 Li Chen
2025-12-10 3:17 ` [PATCH 2/2] dm clone: drop redundant size checks Li Chen
2025-12-10 11:42 ` [PATCH 1/2] dm cache: drop redundant origin size check Ming Hung Tsai
0 siblings, 2 replies; 3+ messages in thread
From: Li Chen @ 2025-12-10 3:17 UTC (permalink / raw)
To: Alasdair Kergon, Mike Snitzer, Mikulas Patocka, dm-devel, linux-kernel
Cc: Li Chen
The cache target already exposes the origin device through
cache_iterate_devices(), which allows dm-table to call
device_area_is_invalid() and verify that the mapping fits inside the
underlying block device.
The explicit ti->len > origin_sectors test in parse_origin_dev() is
therefore redundant. Drop this check and rely on the core device
validation instead. This changes the user-visible error string when the
origin is too small, but preserves the failure behaviour.
Signed-off-by: Li Chen <me@linux.beauty>
---
drivers/md/dm-cache-target.c | 7 -------
1 file changed, 7 deletions(-)
diff --git a/drivers/md/dm-cache-target.c b/drivers/md/dm-cache-target.c
index a10d75a562db..350a0aa53365 100644
--- a/drivers/md/dm-cache-target.c
+++ b/drivers/md/dm-cache-target.c
@@ -2099,7 +2099,6 @@ static int parse_cache_dev(struct cache_args *ca, struct dm_arg_set *as,
static int parse_origin_dev(struct cache_args *ca, struct dm_arg_set *as,
char **error)
{
- sector_t origin_sectors;
int r;
if (!at_least_one_arg(as, error))
@@ -2112,12 +2111,6 @@ static int parse_origin_dev(struct cache_args *ca, struct dm_arg_set *as,
return r;
}
- origin_sectors = get_dev_size(ca->origin_dev);
- if (ca->ti->len > origin_sectors) {
- *error = "Device size larger than cached device";
- return -EINVAL;
- }
-
return 0;
}
--
2.51.0
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH 2/2] dm clone: drop redundant size checks
2025-12-10 3:17 [PATCH 1/2] dm cache: drop redundant origin size check Li Chen
@ 2025-12-10 3:17 ` Li Chen
2025-12-10 11:42 ` [PATCH 1/2] dm cache: drop redundant origin size check Ming Hung Tsai
1 sibling, 0 replies; 3+ messages in thread
From: Li Chen @ 2025-12-10 3:17 UTC (permalink / raw)
To: Alasdair Kergon, Mike Snitzer, Mikulas Patocka, dm-devel, linux-kernel
Cc: Li Chen
The clone target already exposes both source and destination devices via
clone_iterate_devices(), so dm-table's device_area_is_invalid() helper
ensures that the mapping does not extend past either underlying block
device.
The manual comparisons between ti->len and the source/destination device
sizes in parse_source_dev() and parse_dest_dev() are therefore
redundant. Remove these checks and rely on the core validation instead.
This changes the error strings reported when the devices are too small,
but preserves the failure behaviour.
Signed-off-by: Li Chen <me@linux.beauty>
---
drivers/md/dm-clone-target.c | 16 ----------------
1 file changed, 16 deletions(-)
diff --git a/drivers/md/dm-clone-target.c b/drivers/md/dm-clone-target.c
index e956d980672c..ac94e3466560 100644
--- a/drivers/md/dm-clone-target.c
+++ b/drivers/md/dm-clone-target.c
@@ -1697,7 +1697,6 @@ static int parse_metadata_dev(struct clone *clone, struct dm_arg_set *as, char *
static int parse_dest_dev(struct clone *clone, struct dm_arg_set *as, char **error)
{
int r;
- sector_t dest_dev_size;
r = dm_get_device(clone->ti, dm_shift_arg(as),
BLK_OPEN_READ | BLK_OPEN_WRITE, &clone->dest_dev);
@@ -1706,20 +1705,12 @@ static int parse_dest_dev(struct clone *clone, struct dm_arg_set *as, char **err
return r;
}
- dest_dev_size = get_dev_size(clone->dest_dev);
- if (dest_dev_size < clone->ti->len) {
- dm_put_device(clone->ti, clone->dest_dev);
- *error = "Device size larger than destination device";
- return -EINVAL;
- }
-
return 0;
}
static int parse_source_dev(struct clone *clone, struct dm_arg_set *as, char **error)
{
int r;
- sector_t source_dev_size;
r = dm_get_device(clone->ti, dm_shift_arg(as), BLK_OPEN_READ,
&clone->source_dev);
@@ -1728,13 +1719,6 @@ static int parse_source_dev(struct clone *clone, struct dm_arg_set *as, char **e
return r;
}
- source_dev_size = get_dev_size(clone->source_dev);
- if (source_dev_size < clone->ti->len) {
- dm_put_device(clone->ti, clone->source_dev);
- *error = "Device size larger than source device";
- return -EINVAL;
- }
-
return 0;
}
--
2.51.0
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH 1/2] dm cache: drop redundant origin size check
2025-12-10 3:17 [PATCH 1/2] dm cache: drop redundant origin size check Li Chen
2025-12-10 3:17 ` [PATCH 2/2] dm clone: drop redundant size checks Li Chen
@ 2025-12-10 11:42 ` Ming Hung Tsai
1 sibling, 0 replies; 3+ messages in thread
From: Ming Hung Tsai @ 2025-12-10 11:42 UTC (permalink / raw)
To: Li Chen
Cc: Alasdair Kergon, Mike Snitzer, Mikulas Patocka, dm-devel, linux-kernel
On Wed, Dec 10, 2025 at 11:25 AM Li Chen <me@linux.beauty> wrote:
>
> The cache target already exposes the origin device through
> cache_iterate_devices(), which allows dm-table to call
> device_area_is_invalid() and verify that the mapping fits inside the
> underlying block device.
>
> The explicit ti->len > origin_sectors test in parse_origin_dev() is
> therefore redundant. Drop this check and rely on the core device
> validation instead. This changes the user-visible error string when the
> origin is too small, but preserves the failure behaviour.
>
> Signed-off-by: Li Chen <me@linux.beauty>
> ---
> drivers/md/dm-cache-target.c | 7 -------
> 1 file changed, 7 deletions(-)
>
> diff --git a/drivers/md/dm-cache-target.c b/drivers/md/dm-cache-target.c
> index a10d75a562db..350a0aa53365 100644
> --- a/drivers/md/dm-cache-target.c
> +++ b/drivers/md/dm-cache-target.c
> @@ -2099,7 +2099,6 @@ static int parse_cache_dev(struct cache_args *ca, struct dm_arg_set *as,
> static int parse_origin_dev(struct cache_args *ca, struct dm_arg_set *as,
> char **error)
> {
> - sector_t origin_sectors;
> int r;
>
> if (!at_least_one_arg(as, error))
> @@ -2112,12 +2111,6 @@ static int parse_origin_dev(struct cache_args *ca, struct dm_arg_set *as,
> return r;
> }
>
> - origin_sectors = get_dev_size(ca->origin_dev);
> - if (ca->ti->len > origin_sectors) {
> - *error = "Device size larger than cached device";
> - return -EINVAL;
> - }
> -
> return 0;
> }
>
> --
> 2.51.0
>
>
The size check in parse_origin_dev() provides early validation during
table creation. Removing it delays the size check until the resume
phase when reloading an existing device, which leaves the device
suspended if the new table size is invalid. This changes user
expectations and could affect volume managers like LVM and Stratis.
Ming-Hung Tsai
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-12-10 11:42 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-12-10 3:17 [PATCH 1/2] dm cache: drop redundant origin size check Li Chen
2025-12-10 3:17 ` [PATCH 2/2] dm clone: drop redundant size checks Li Chen
2025-12-10 11:42 ` [PATCH 1/2] dm cache: drop redundant origin size check Ming Hung Tsai
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®