diff options
author | Kevin Greenan <kmgreen2@gmail.com> | 2014-08-21 12:15:32 -0700 |
---|---|---|
committer | Kevin Greenan <kmgreen2@gmail.com> | 2014-08-21 13:05:59 -0700 |
commit | c9af505400382a3117e2249acf308a08e97d48a9 (patch) | |
tree | ef1975921dbf311c600a535ed611c6a4abb1d464 /src/backends | |
parent | c48eae68e3a9f0ca79e8a4bc1ff837f1d6db5b3a (diff) | |
download | liberasurecode-c9af505400382a3117e2249acf308a08e97d48a9.tar.gz |
Backend changes needed to honor "excluded fragments".
Diffstat (limited to 'src/backends')
-rw-r--r-- | src/backends/jerasure/jerasure_rs_cauchy.c | 5 | ||||
-rw-r--r-- | src/backends/jerasure/jerasure_rs_vand.c | 5 | ||||
-rw-r--r-- | src/backends/null/null.c | 4 | ||||
-rw-r--r-- | src/backends/xor/flat_xor_hd.c | 7 |
4 files changed, 12 insertions, 9 deletions
diff --git a/src/backends/jerasure/jerasure_rs_cauchy.c b/src/backends/jerasure/jerasure_rs_cauchy.c index b06ff6d..af37f76 100644 --- a/src/backends/jerasure/jerasure_rs_cauchy.c +++ b/src/backends/jerasure/jerasure_rs_cauchy.c @@ -160,11 +160,12 @@ out: * */ static int jerasure_rs_cauchy_min_fragments(void *desc, int *missing_idxs, - int *fragments_needed) + int *fragments_to_exclude, int *fragments_needed) { struct jerasure_rs_cauchy_descriptor *jerasure_desc = (struct jerasure_rs_cauchy_descriptor*)desc; - uint64_t missing_bm = convert_list_to_bitmap(missing_idxs); + uint64_t exclude_bm = convert_list_to_bitmap(fragments_to_exclude); + uint64_t missing_bm = convert_list_to_bitmap(missing_idxs) | exclude_bm; int i; int j = 0; int ret = -1; diff --git a/src/backends/jerasure/jerasure_rs_vand.c b/src/backends/jerasure/jerasure_rs_vand.c index 970d205..05cbfda 100644 --- a/src/backends/jerasure/jerasure_rs_vand.c +++ b/src/backends/jerasure/jerasure_rs_vand.c @@ -139,12 +139,13 @@ out: } static int jerasure_rs_vand_min_fragments(void *desc, int *missing_idxs, - int *fragments_needed) + int *fragments_to_exclude, int *fragments_needed) { struct jerasure_rs_vand_descriptor *jerasure_desc = (struct jerasure_rs_vand_descriptor*)desc; - uint64_t missing_bm = convert_list_to_bitmap(missing_idxs); + uint64_t exclude_bm = convert_list_to_bitmap(fragments_to_exclude); + uint64_t missing_bm = convert_list_to_bitmap(missing_idxs) | exclude_bm; int i; int j = 0; int ret = -1; diff --git a/src/backends/null/null.c b/src/backends/null/null.c index b04cd99..23e8901 100644 --- a/src/backends/null/null.c +++ b/src/backends/null/null.c @@ -54,7 +54,7 @@ struct null_descriptor { /* set of fragments needed to reconstruct at a minimum */ int (*null_code_fragments_needed)(void *code_desc, int *missing_idxs, - int *fragments_needed); + int *fragments_to_exclude, int *fragments_needed); /* fields needed to hold state */ int *matrix; @@ -94,7 +94,7 @@ static int null_reconstruct(void *desc, char **data, char **parity, } static int null_min_fragments(void *desc, int *missing_idxs, - int *fragments_needed) + int *fragments_to_exclude, int *fragments_needed) { struct null_descriptor *xdesc = (struct null_descriptor *) desc; diff --git a/src/backends/xor/flat_xor_hd.c b/src/backends/xor/flat_xor_hd.c index 23e0281..9b87314 100644 --- a/src/backends/xor/flat_xor_hd.c +++ b/src/backends/xor/flat_xor_hd.c @@ -46,7 +46,7 @@ struct flat_xor_hd_descriptor { int (*xor_hd_decode)(xor_code_t *code_desc, char **data, char **parity, int *missing_idxs, int blocksize, int decode_parity); int (*xor_hd_fragments_needed)(xor_code_t *code_desc, int *missing_idxs, - int *fragments_needed); + int *fragments_to_exclude, int *fragments_needed); }; #define DEFAULT_W 32 @@ -86,13 +86,14 @@ static int flat_xor_hd_reconstruct(void *desc, } static int flat_xor_hd_min_fragments(void *desc, - int *missing_idxs, int *fragments_needed) + int *missing_idxs, int *fragments_to_exclude, + int *fragments_needed) { struct flat_xor_hd_descriptor *xdesc = (struct flat_xor_hd_descriptor *) desc; xor_code_t *xor_desc = (xor_code_t *) xdesc->xor_desc; - xor_desc->fragments_needed(xor_desc, missing_idxs, fragments_needed); + xor_desc->fragments_needed(xor_desc, missing_idxs, fragments_to_exclude, fragments_needed); return 0; } |