summaryrefslogtreecommitdiff
path: root/src/erasurecode_preprocessing.c
diff options
context:
space:
mode:
authorTushar Gohad <tushar.gohad@intel.com>2014-07-21 01:19:36 -0700
committerTushar Gohad <tushar.gohad@intel.com>2014-07-21 01:19:36 -0700
commit8a07d41e850694a3c60904119b899cf476c2b05e (patch)
tree306336fc4597c9e6255495ea8ccc32516b7dae94 /src/erasurecode_preprocessing.c
parent4de83981d33ec120e4ba1fcd7190256f353c12a3 (diff)
downloadliberasurecode-8a07d41e850694a3c60904119b899cf476c2b05e.tar.gz
Add encode postprocessing, checksum helpers
Signed-off-by: Tushar Gohad <tushar.gohad@intel.com>
Diffstat (limited to 'src/erasurecode_preprocessing.c')
-rw-r--r--src/erasurecode_preprocessing.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/src/erasurecode_preprocessing.c b/src/erasurecode_preprocessing.c
index 082243f..6591180 100644
--- a/src/erasurecode_preprocessing.c
+++ b/src/erasurecode_preprocessing.c
@@ -40,15 +40,16 @@ int prepare_fragments_for_encode(ec_backend_t instance,
int i, ret = 0;
int data_len; /* data len to write to fragment headers */
int aligned_data_len; /* EC algorithm compatible data length */
+ int bsize = 0;
/* Calculate data sizes, aligned_data_len guaranteed to be divisible by k*/
data_len = orig_data_size;
aligned_data_len = get_aligned_data_size(instance, orig_data_size);
- *blocksize = aligned_data_len / k;
+ *blocksize = bsize = (aligned_data_len / k);
for (i = 0; i < k; i++) {
- int payload_size = data_len > *blocksize ? *blocksize : data_len;
- char *fragment = alloc_fragment_buffer(*blocksize);
+ int payload_size = data_len > bsize ? bsize : data_len;
+ char *fragment = (char *) alloc_fragment_buffer(bsize);
if (NULL == fragment) {
ret = -ENOMEM;
goto out_error;
@@ -56,32 +57,38 @@ int prepare_fragments_for_encode(ec_backend_t instance,
/* Copy existing data into clean, zero'd out buffer */
encoded_data[i] = get_data_ptr_from_fragment(fragment);
+
if (data_len > 0) {
memcpy(encoded_data[i], orig_data, payload_size);
}
/* Fragment size will always be the same
* (may be able to get rid of this) */
- set_fragment_payload_size(fragment, *blocksize);
+ set_fragment_payload_size(fragment, bsize);
+
+ /* Original data length */
+ set_orig_data_size(fragment, orig_data_size);
orig_data += payload_size;
data_len -= payload_size;
}
for (i = 0; i < m; i++) {
- char *fragment = alloc_fragment_buffer(*blocksize);
+ char *fragment = (char *) alloc_fragment_buffer(bsize);
if (NULL == fragment) {
ret = -ENOMEM;
goto out_error;
}
+
encoded_parity[i] = get_data_ptr_from_fragment(fragment);
- set_fragment_payload_size(fragment, *blocksize);
+ set_fragment_payload_size(fragment, bsize);
}
out:
return ret;
out_error:
+ printf ("ERROR in encode\n");
if (encoded_data) {
for (i = 0; i < k; i++) {
if (encoded_data[i])