]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
dm clone: drop redundant size checks
authorLi Chen <me@linux.beauty>
Wed, 10 Dec 2025 03:17:57 +0000 (11:17 +0800)
committerMikulas Patocka <mpatocka@redhat.com>
Sun, 4 Jan 2026 19:35:32 +0000 (20:35 +0100)
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>
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
drivers/md/dm-clone-target.c

index e956d980672c80e8b1ee87b8aa7a9f53877e0bba..ac94e3466560e9feff8a91c4445704336c18fac2 100644 (file)
@@ -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;
 }