summaryrefslogtreecommitdiff
path: root/src/backends
diff options
context:
space:
mode:
authorKevin Greenan <kmgreen2@gmail.com>2014-07-23 13:24:34 -0700
committerKevin Greenan <kmgreen2@gmail.com>2014-07-23 13:24:34 -0700
commitaab24dcc0b88334bd9f1029589cbd0f338f2426e (patch)
tree3d2d5bfe66e2acdd5cec3cf8e4adda7f5c31960d /src/backends
parentac9e113f432b34244ddd475e1b753d22ec23c08f (diff)
downloadliberasurecode-aab24dcc0b88334bd9f1029589cbd0f338f2426e.tar.gz
Implemented fragments needed for jerasure backends
Diffstat (limited to 'src/backends')
-rw-r--r--src/backends/jerasure/jerasure_rs_cauchy.c24
-rw-r--r--src/backends/jerasure/jerasure_rs_vand.c21
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