diff options
author | Kevin Greenan <kmgreen2@gmail.com> | 2014-07-23 13:24:34 -0700 |
---|---|---|
committer | Kevin Greenan <kmgreen2@gmail.com> | 2014-07-23 13:24:34 -0700 |
commit | aab24dcc0b88334bd9f1029589cbd0f338f2426e (patch) | |
tree | 3d2d5bfe66e2acdd5cec3cf8e4adda7f5c31960d /src/backends | |
parent | ac9e113f432b34244ddd475e1b753d22ec23c08f (diff) | |
download | liberasurecode-aab24dcc0b88334bd9f1029589cbd0f338f2426e.tar.gz |
Implemented fragments needed for jerasure backends
Diffstat (limited to 'src/backends')
-rw-r--r-- | src/backends/jerasure/jerasure_rs_cauchy.c | 24 | ||||
-rw-r--r-- | src/backends/jerasure/jerasure_rs_vand.c | 21 |
2 files changed, 41 insertions, 4 deletions
diff --git a/src/backends/jerasure/jerasure_rs_cauchy.c b/src/backends/jerasure/jerasure_rs_cauchy.c index d53f9b3..2fd46f6 100644 --- a/src/backends/jerasure/jerasure_rs_cauchy.c +++ b/src/backends/jerasure/jerasure_rs_cauchy.c @@ -153,13 +153,33 @@ out: } +/* + * Caller will allocate an array of size k for fragments_needed + * + */ static int jerasure_rs_cauchy_min_fragments(void *desc, int *missing_idxs, int *fragments_needed) { struct jerasure_rs_cauchy_descriptor *jerasure_desc = (struct jerasure_rs_cauchy_descriptor*)desc; - //ToDo (KMG): We need to move over the bitmap helper functions before we - // can implement this. + uint64_t missing_bm = convert_list_to_bitmap(missing_idxs); + int i; + int j = 0; + int ret = -1; + + for (i = 0; i < (jerasure_desc->k + jerasure_desc->m); i++) { + if (!(missing_bm & (1 << i))) { + fragments_needed[j] = i; + j++; + } + if (j == jerasure_desc->k) { + ret = 0; + break; + } + } + +out: + return ret; } #define DEFAULT_W 4 diff --git a/src/backends/jerasure/jerasure_rs_vand.c b/src/backends/jerasure/jerasure_rs_vand.c index 9c4d23b..6b13555 100644 --- a/src/backends/jerasure/jerasure_rs_vand.c +++ b/src/backends/jerasure/jerasure_rs_vand.c @@ -140,8 +140,25 @@ static int jerasure_rs_vand_min_fragments(void *desc, int *missing_idxs, { struct jerasure_rs_vand_descriptor *jerasure_desc = (struct jerasure_rs_vand_descriptor*)desc; - //ToDo (KMG): We need to move over the bitmap helper functions before we - // can implement this. + + uint64_t missing_bm = convert_list_to_bitmap(missing_idxs); + int i; + int j = 0; + int ret = -1; + + for (i = 0; i < (jerasure_desc->k + jerasure_desc->m); i++) { + if (!(missing_bm & (1 << i))) { + fragments_needed[j] = i; + j++; + } + if (j == jerasure_desc->k) { + ret = 0; + break; + } + } + +out: + return ret; } #define DEFAULT_W 16 |