diff options
author | Kevin Greenan <kmgreen2@gmail.com> | 2014-08-05 14:30:28 -0700 |
---|---|---|
committer | Kevin Greenan <kmgreen2@gmail.com> | 2014-08-05 14:33:39 -0700 |
commit | 109e09fa9c2873957d7b415351f8b42940d01669 (patch) | |
tree | 78529e88a81b29bf08cd8fc7ed8ed06812b345f0 /src/backends | |
parent | dbbc02d3db33d1b939b06f4de3a1f6c23e89995b (diff) | |
download | liberasurecode-109e09fa9c2873957d7b415351f8b42940d01669.tar.gz |
Fixed reconstruction.
Diffstat (limited to 'src/backends')
-rw-r--r-- | src/backends/jerasure/jerasure_rs_cauchy.c | 22 | ||||
-rw-r--r-- | src/backends/jerasure/jerasure_rs_vand.c | 23 |
2 files changed, 25 insertions, 20 deletions
diff --git a/src/backends/jerasure/jerasure_rs_cauchy.c b/src/backends/jerasure/jerasure_rs_cauchy.c index 2fd46f6..aba148d 100644 --- a/src/backends/jerasure/jerasure_rs_cauchy.c +++ b/src/backends/jerasure/jerasure_rs_cauchy.c @@ -123,26 +123,28 @@ static int jerasure_rs_cauchy_reconstruct(void *desc, char **data, char **parity goto out; } - if (destination_idx < jerasure_desc->k) { - - erased = jerasure_desc->jerasure_erasures_to_erased(jerasure_desc->k, - jerasure_desc->m, missing_idxs); + erased = jerasure_desc->jerasure_erasures_to_erased(jerasure_desc->k, + jerasure_desc->m, missing_idxs); - ret = jerasure_desc->jerasure_make_decoding_bitmatrix(jerasure_desc->k, jerasure_desc->m, jerasure_desc->w, jerasure_desc->bitmatrix, + ret = jerasure_desc->jerasure_make_decoding_bitmatrix(jerasure_desc->k, jerasure_desc->m, + jerasure_desc->w, jerasure_desc->bitmatrix, erased, decoding_matrix, dm_ids); + + if (destination_idx < jerasure_desc->k) { decoding_row = decoding_matrix + (destination_idx * jerasure_desc->k * jerasure_desc->w * jerasure_desc->w); } else { - ret = 0; decoding_row = jerasure_desc->bitmatrix + ((destination_idx - jerasure_desc->k) * jerasure_desc->k * jerasure_desc->w * jerasure_desc->w); } - + if (ret == 0) { - jerasure_desc->jerasure_bitmatrix_dotprod(jerasure_desc->k, jerasure_desc->w, decoding_row, dm_ids, destination_idx, + jerasure_desc->jerasure_bitmatrix_dotprod(jerasure_desc->k, jerasure_desc->w, + decoding_row, dm_ids, destination_idx, data, parity, blocksize, PYECC_CAUCHY_PACKETSIZE); + } else { + goto out; } - out: if (NULL != decoding_matrix) { free(decoding_matrix); @@ -150,7 +152,7 @@ out: if (NULL != dm_ids) { free(dm_ids); } - + return ret; } /* diff --git a/src/backends/jerasure/jerasure_rs_vand.c b/src/backends/jerasure/jerasure_rs_vand.c index 6b13555..bcf2dfc 100644 --- a/src/backends/jerasure/jerasure_rs_vand.c +++ b/src/backends/jerasure/jerasure_rs_vand.c @@ -82,6 +82,8 @@ static int jerasure_rs_vand_decode(void *desc, char **data, char **parity, jerasure_desc->jerasure_matrix_decode(jerasure_desc->k, jerasure_desc->m, jerasure_desc->w, jerasure_desc->matrix, 1, missing_idxs, data, parity, blocksize); + + return 0; } static int jerasure_rs_vand_reconstruct(void *desc, char **data, char **parity, @@ -101,28 +103,28 @@ static int jerasure_rs_vand_reconstruct(void *desc, char **data, char **parity, if (NULL == decoding_matrix || NULL == dm_ids) { goto out; } + erased = jerasure_desc->jerasure_erasures_to_erased(jerasure_desc->k, + jerasure_desc->m, missing_idxs); - if (destination_idx < jerasure_desc->k) { - - erased = jerasure_desc->jerasure_erasures_to_erased(jerasure_desc->k, - jerasure_desc->m, missing_idxs); - - ret = jerasure_desc->jerasure_make_decoding_matrix(jerasure_desc->k, - jerasure_desc->m, jerasure_desc->w, jerasure_desc->matrix, - erased, decoding_matrix, dm_ids); + ret = jerasure_desc->jerasure_make_decoding_matrix(jerasure_desc->k, + jerasure_desc->m, jerasure_desc->w, jerasure_desc->matrix, + erased, decoding_matrix, dm_ids); + + if (destination_idx < jerasure_desc->k) { decoding_row = decoding_matrix + (destination_idx * jerasure_desc->k); } else { - ret = 0; decoding_row = jerasure_desc->matrix + ((destination_idx - jerasure_desc->k) * jerasure_desc->k); } - + if (ret == 0) { jerasure_desc->jerasure_matrix_dotprod(jerasure_desc->k, jerasure_desc->w, decoding_row, dm_ids, destination_idx, data, parity, blocksize); + } else { + goto out; } out: @@ -133,6 +135,7 @@ out: free(dm_ids); } + return ret; } static int jerasure_rs_vand_min_fragments(void *desc, int *missing_idxs, |