summaryrefslogtreecommitdiff
path: root/src/backends
diff options
context:
space:
mode:
authorKevin Greenan <kmgreen2@gmail.com>2014-08-05 14:30:28 -0700
committerKevin Greenan <kmgreen2@gmail.com>2014-08-05 14:33:39 -0700
commit109e09fa9c2873957d7b415351f8b42940d01669 (patch)
tree78529e88a81b29bf08cd8fc7ed8ed06812b345f0 /src/backends
parentdbbc02d3db33d1b939b06f4de3a1f6c23e89995b (diff)
downloadliberasurecode-109e09fa9c2873957d7b415351f8b42940d01669.tar.gz
Fixed reconstruction.
Diffstat (limited to 'src/backends')
-rw-r--r--src/backends/jerasure/jerasure_rs_cauchy.c22
-rw-r--r--src/backends/jerasure/jerasure_rs_vand.c23
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,