diff options
author | Tushar Gohad <tushar.gohad@intel.com> | 2014-07-21 01:19:36 -0700 |
---|---|---|
committer | Tushar Gohad <tushar.gohad@intel.com> | 2014-07-21 01:19:36 -0700 |
commit | 8a07d41e850694a3c60904119b899cf476c2b05e (patch) | |
tree | 306336fc4597c9e6255495ea8ccc32516b7dae94 /src/erasurecode_preprocessing.c | |
parent | 4de83981d33ec120e4ba1fcd7190256f353c12a3 (diff) | |
download | liberasurecode-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.c | 19 |
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]) |