summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Biggers <ebiggers@kernel.org>2026-02-05 20:59:34 -0800
committerMikulas Patocka <mpatocka@redhat.com>2026-03-09 15:13:02 +0100
commit96dfabe7382bb984a702b689b69b784d2a29ca0b (patch)
tree93b3b383b4c1e05007f88f09a2dfc79e6481dbb0
parent5ef22361fa98a44409f11a10cb7d08b5cbf6d57c (diff)
dm-verity-fec: simplify deinterleaving
Since fec_read_bufs() deinterleaves the bytes from 'bbuf' sequentially starting from 'block_offset', it can just do simple increments instead of the more complex fec_buffer_rs_index() computation. Signed-off-by: Eric Biggers <ebiggers@kernel.org> Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
-rw-r--r--drivers/md/dm-verity-fec.c19
1 files changed, 4 insertions, 15 deletions
diff --git a/drivers/md/dm-verity-fec.c b/drivers/md/dm-verity-fec.c
index baf988c29761..4aee948dde5d 100644
--- a/drivers/md/dm-verity-fec.c
+++ b/drivers/md/dm-verity-fec.c
@@ -45,15 +45,6 @@ static inline u8 *fec_buffer_rs_message(struct dm_verity *v,
}
/*
- * Return the index of the current RS message when called inside
- * fec_for_each_buffer_rs_message.
- */
-static inline unsigned int fec_buffer_rs_index(unsigned int i, unsigned int j)
-{
- return (i << DM_VERITY_FEC_BUF_RS_BITS) + j;
-}
-
-/*
* Decode all RS codewords whose message bytes were loaded into fio->bufs. Copy
* the corrected bytes into fio->output starting from block_offset.
*/
@@ -179,7 +170,7 @@ static int fec_read_bufs(struct dm_verity *v, struct dm_verity_io *io,
u64 block, ileaved;
u8 *bbuf;
u8 want_digest[HASH_MAX_DIGESTSIZE];
- unsigned int n, k;
+ unsigned int n, src_pos;
struct bio *bio = dm_bio_from_per_bio_data(io, v->ti->per_io_data_size);
if (neras)
@@ -254,13 +245,11 @@ static int fec_read_bufs(struct dm_verity *v, struct dm_verity_io *io,
* deinterleave and copy the bytes that fit into bufs,
* starting from block_offset
*/
+ src_pos = block_offset;
fec_for_each_buffer_rs_message(fio, n, j) {
- k = fec_buffer_rs_index(n, j) + block_offset;
-
- if (k >= v->fec->block_size)
+ if (src_pos >= v->fec->block_size)
goto done;
-
- fec_buffer_rs_message(v, fio, n, j)[i] = bbuf[k];
+ fec_buffer_rs_message(v, fio, n, j)[i] = bbuf[src_pos++];
}
done:
dm_bufio_release(buf);