u32 mod;
mod = do_div(offset, v->fec->rs_k);
- return offset + mod * (v->fec->rounds << v->data_dev_block_bits);
+ return offset + mod * (v->fec->region_blocks << v->data_dev_block_bits);
}
/* Loop over each allocated buffer. */
*/
offset = block << v->data_dev_block_bits;
- res = div64_u64(offset, v->fec->rounds << 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->rounds << v->data_dev_block_bits);
+ rsb = offset - res * (v->fec->region_blocks << v->data_dev_block_bits);
/*
* Locating erasures is slow, so attempt to recover the block without
return -EINVAL;
}
- f->rounds = f->blocks;
- if (sector_div(f->rounds, f->rs_k))
- f->rounds++;
+ f->region_blocks = f->blocks;
+ if (sector_div(f->region_blocks, f->rs_k))
+ f->region_blocks++;
/*
* Due to optional metadata, f->blocks can be larger than
* data_blocks and hash_blocks combined.
*/
- if (f->blocks < v->data_blocks + hash_blocks || !f->rounds) {
+ if (f->blocks < v->data_blocks + hash_blocks || !f->region_blocks) {
ti->error = "Invalid " DM_VERITY_OPT_FEC_BLOCKS;
return -EINVAL;
}
dm_bufio_set_sector_offset(f->bufio, f->start << (v->data_dev_block_bits - SECTOR_SHIFT));
- if (dm_bufio_get_device_size(f->bufio) < f->rounds * f->roots) {
+ if (dm_bufio_get_device_size(f->bufio) < f->region_blocks * f->roots) {
ti->error = "FEC device is too small";
return -E2BIG;
}
size_t block_size; /* size of data, hash, and parity blocks in bytes */
sector_t start; /* parity data start in blocks */
sector_t blocks; /* number of blocks covered */
- sector_t rounds; /* number of interleaving rounds */
+ sector_t region_blocks; /* blocks per region: ceil(blocks / rs_k) */
sector_t hash_blocks; /* blocks covered after v->hash_start */
unsigned char roots; /* parity bytes per RS codeword, n-k of RS(n, k) */
unsigned char rs_k; /* message bytes per RS codeword, k of RS(n, k) */