Lines Matching refs:fio
45 static int fec_decode_rs8(struct dm_verity *v, struct dm_verity_fec_io *fio,
54 return decode_rs8(fio->rs, data, par, v->fec->rsn, NULL, neras,
55 fio->erasures, 0, NULL);
105 struct dm_verity_fec_io *fio,
108 return &fio->bufs[i][j * v->fec->rsn];
121 * Decode all RS blocks from buffers and copy corrected bytes into fio->output
124 static int fec_decode_bufs(struct dm_verity *v, struct dm_verity_fec_io *fio,
141 fec_for_each_buffer_rs_block(fio, n, i) {
142 block = fec_buffer_rs_block(v, fio, n, i);
143 res = fec_decode_rs8(v, fio, block, &par[offset], neras);
150 fio->output[block_offset] = block[byte_index];
208 struct dm_verity_fec_io *fio = fec_io(io);
260 fio->erasures[(*neras)++] = i;
279 fio->erasures[(*neras)++] = i;
286 fec_for_each_buffer_rs_block(fio, n, j) {
292 rs_block = fec_buffer_rs_block(v, fio, n, j);
306 static int fec_alloc_bufs(struct dm_verity *v, struct dm_verity_fec_io *fio)
310 if (!fio->rs)
311 fio->rs = mempool_alloc(&v->fec->rs_pool, GFP_NOIO);
314 if (fio->bufs[n])
317 fio->bufs[n] = mempool_alloc(&v->fec->prealloc_pool, GFP_NOWAIT);
318 if (unlikely(!fio->bufs[n])) {
325 fec_for_each_extra_buffer(fio, n) {
326 if (fio->bufs[n])
329 fio->bufs[n] = mempool_alloc(&v->fec->extra_pool, GFP_NOWAIT);
331 if (unlikely(!fio->bufs[n]))
334 fio->nbufs = n;
336 if (!fio->output)
337 fio->output = mempool_alloc(&v->fec->output_pool, GFP_NOIO);
346 static void fec_init_bufs(struct dm_verity *v, struct dm_verity_fec_io *fio)
350 fec_for_each_buffer(fio, n)
351 memset(fio->bufs[n], 0, v->fec->rsn << DM_VERITY_FEC_BUF_RS_BITS);
353 memset(fio->erasures, 0, sizeof(fio->erasures));
358 * (indicated by @offset) in fio->output. If @use_erasures is non-zero, uses
362 struct dm_verity_fec_io *fio, u64 rsb, u64 offset,
368 r = fec_alloc_bufs(v, fio);
373 fec_init_bufs(v, fio);
380 r = fec_decode_bufs(v, fio, rsb, r, pos, neras);
384 pos += fio->nbufs << DM_VERITY_FEC_BUF_RS_BITS;
388 r = verity_hash(v, verity_io_hash_req(v, io), fio->output,
407 struct dm_verity_fec_io *fio = fec_io(io);
409 memcpy(data, &fio->output[fio->output_pos], len);
410 fio->output_pos += len;
424 struct dm_verity_fec_io *fio = fec_io(io);
430 if (fio->level >= DM_VERITY_FEC_MAX_RECURSION) {
435 fio->level++;
464 r = fec_decode_rsb(v, io, fio, rsb, offset, false);
466 r = fec_decode_rsb(v, io, fio, rsb, offset, true);
472 memcpy(dest, fio->output, 1 << v->data_dev_block_bits);
474 fio->output_pos = 0;
479 fio->level--;
490 struct dm_verity_fec_io *fio = fec_io(io);
495 mempool_free(fio->rs, &f->rs_pool);
498 mempool_free(fio->bufs[n], &f->prealloc_pool);
500 fec_for_each_extra_buffer(fio, n)
501 mempool_free(fio->bufs[n], &f->extra_pool);
503 mempool_free(fio->output, &f->output_pool);
511 struct dm_verity_fec_io *fio = fec_io(io);
516 fio->rs = NULL;
517 memset(fio->bufs, 0, sizeof(fio->bufs));
518 fio->nbufs = 0;
519 fio->output = NULL;
520 fio->level = 0;