]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
dm-bufio: fix wrong count calculation in dm_bufio_issue_discard
authorMikulas Patocka <mpatocka@redhat.com>
Fri, 10 Jul 2026 16:32:49 +0000 (18:32 +0200)
committerMikulas Patocka <mpatocka@redhat.com>
Fri, 10 Jul 2026 16:39:17 +0000 (18:39 +0200)
block_to_sector converts a block number to a sector number and adds
c->start to the result. It is inappropriate to use this function for
converting the number of blocks to a number to sectors because c->start
would be incorrectly added to the result.

Luckily, the only target that uses dm_bufio_issue_discard is dm-ebs,
which sets c->start to 0, so this bug is latent.

Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Assisted-by: Claude:claude-opus-4-6
Fixes: 6fbeb0048e6b ("dm bufio: implement discard")
Cc: stable@vger.kernel.org
drivers/md/dm-bufio.c

index 26fedf5883eff6d2fa1703364713d616e5df07c6..a458b9fd2fcd627ef391561e1a2a8e8181489050 100644 (file)
@@ -2238,7 +2238,9 @@ int dm_bufio_issue_discard(struct dm_bufio_client *c, sector_t block, sector_t c
        struct dm_io_region io_reg = {
                .bdev = c->bdev,
                .sector = block_to_sector(c, block),
-               .count = block_to_sector(c, count),
+               .count = likely(c->sectors_per_block_bits >= 0) ?
+                       count << c->sectors_per_block_bits :
+                       count * (c->block_size >> SECTOR_SHIFT),
        };
 
        if (WARN_ON_ONCE(dm_bufio_in_request()))