]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
dm-verity-fec: simplify computation of rsb
authorEric Biggers <ebiggers@kernel.org>
Fri, 6 Feb 2026 04:59:32 +0000 (20:59 -0800)
committerMikulas Patocka <mpatocka@redhat.com>
Mon, 9 Mar 2026 14:12:44 +0000 (15:12 +0100)
To compute 'rsb', verity_fec_decode() divides 'offset' by
'v->fec->region_blocks << v->data_dev_block_bits', then subtracts the
quotient times that divisor.  That's simply the long way to do a modulo
operation, i.e. a - b * floor(a / b) instead of just a % b.  Use
div64_u64_rem() to get the remainder more concisely.

Signed-off-by: Eric Biggers <ebiggers@kernel.org>
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
drivers/md/dm-verity-fec.c

index d132fd5dc7b43b39b96b87d33d3d8cb796942cc6..d2c55896e6f7035835be046761d2d2dfd161ba7c 100644 (file)
@@ -377,7 +377,7 @@ int verity_fec_decode(struct dm_verity *v, struct dm_verity_io *io,
 {
        int r;
        struct dm_verity_fec_io *fio;
-       u64 offset, res, rsb;
+       u64 offset, rsb;
 
        if (!verity_fec_is_enabled(v))
                return -EOPNOTSUPP;
@@ -405,13 +405,13 @@ int verity_fec_decode(struct dm_verity *v, struct dm_verity_io *io,
         */
 
        offset = block << v->data_dev_block_bits;
-       res = div64_u64(offset, v->fec->region_blocks << v->data_dev_block_bits);
 
        /*
         * The base RS block we can feed to the interleaver to find out all
         * blocks required for decoding.
         */
-       rsb = offset - res * (v->fec->region_blocks << v->data_dev_block_bits);
+       div64_u64_rem(offset, v->fec->region_blocks << v->data_dev_block_bits,
+                     &rsb);
 
        /*
         * Locating erasures is slow, so attempt to recover the block without