Lines Matching defs: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);
106 struct dm_verity_fec_io *fio,
109 return &fio->bufs[i][j * v->fec->rsn];
122 * Decode all RS blocks from buffers and copy corrected bytes into fio->output
126 struct dm_verity_fec_io *fio, u64 rsb, int byte_index,
143 fec_for_each_buffer_rs_block(fio, n, i) {
144 block = fec_buffer_rs_block(v, fio, n, i);
145 res = fec_decode_rs8(v, fio, block, &par[offset], neras);
152 fio->output[block_offset] = block[byte_index];
210 struct dm_verity_fec_io *fio = fec_io(io);
263 fio->erasures[(*neras)++] = i;
282 fio->erasures[(*neras)++] = i;
289 fec_for_each_buffer_rs_block(fio, n, j) {
295 rs_block = fec_buffer_rs_block(v, fio, n, j);
309 static int fec_alloc_bufs(struct dm_verity *v, struct dm_verity_fec_io *fio)
313 if (!fio->rs)
314 fio->rs = mempool_alloc(&v->fec->rs_pool, GFP_NOIO);
317 if (fio->bufs[n])
320 fio->bufs[n] = mempool_alloc(&v->fec->prealloc_pool, GFP_NOWAIT);
321 if (unlikely(!fio->bufs[n])) {
328 fec_for_each_extra_buffer(fio, n) {
329 if (fio->bufs[n])
332 fio->bufs[n] = mempool_alloc(&v->fec->extra_pool, GFP_NOWAIT);
334 if (unlikely(!fio->bufs[n]))
337 fio->nbufs = n;
339 if (!fio->output)
340 fio->output = mempool_alloc(&v->fec->output_pool, GFP_NOIO);
349 static void fec_init_bufs(struct dm_verity *v, struct dm_verity_fec_io *fio)
353 fec_for_each_buffer(fio, n)
354 memset(fio->bufs[n], 0, v->fec->rsn << DM_VERITY_FEC_BUF_RS_BITS);
356 memset(fio->erasures, 0, sizeof(fio->erasures));
361 * (indicated by @offset) in fio->output. If @use_erasures is non-zero, uses
365 struct dm_verity_fec_io *fio, u64 rsb, u64 offset,
371 r = fec_alloc_bufs(v, fio);
376 fec_init_bufs(v, fio);
383 r = fec_decode_bufs(v, io, fio, rsb, r, pos, neras);
387 pos += fio->nbufs << DM_VERITY_FEC_BUF_RS_BITS;
391 r = verity_hash(v, verity_io_hash_req(v, io), fio->output,
410 struct dm_verity_fec_io *fio = fec_io(io);
412 memcpy(data, &fio->output[fio->output_pos], len);
413 fio->output_pos += len;
427 struct dm_verity_fec_io *fio = fec_io(io);
433 if (fio->level >= DM_VERITY_FEC_MAX_RECURSION) {
438 fio->level++;
467 r = fec_decode_rsb(v, io, fio, rsb, offset, false);
469 r = fec_decode_rsb(v, io, fio, rsb, offset, true);
475 memcpy(dest, fio->output, 1 << v->data_dev_block_bits);
477 fio->output_pos = 0;
482 fio->level--;
493 struct dm_verity_fec_io *fio = fec_io(io);
498 mempool_free(fio->rs, &f->rs_pool);
501 mempool_free(fio->bufs[n], &f->prealloc_pool);
503 fec_for_each_extra_buffer(fio, n)
504 mempool_free(fio->bufs[n], &f->extra_pool);
506 mempool_free(fio->output, &f->output_pool);
514 struct dm_verity_fec_io *fio = fec_io(io);
519 fio->rs = NULL;
520 memset(fio->bufs, 0, sizeof(fio->bufs));
521 fio->nbufs = 0;
522 fio->output = NULL;
523 fio->level = 0;