diff options
author | Eric Lambert <eric_lambert@xyratex.com> | 2014-09-25 13:23:06 -0700 |
---|---|---|
committer | Eric Lambert <eric_lambert@xyratex.com> | 2014-09-25 13:23:06 -0700 |
commit | 06bb20ca1c9c7800ca3633ca1447deab68a5f0a4 (patch) | |
tree | 09b4839858f50d166c5bd40fcba38ab9ed1e1835 /src | |
parent | c5d467de2a481bc833a506fbfd2d101dabd8a486 (diff) | |
download | liberasurecode-06bb20ca1c9c7800ca3633ca1447deab68a5f0a4.tar.gz |
crc32 checksum now supported (prior to this commit checksum values were
not being placed into the fragment header).
Diffstat (limited to 'src')
-rw-r--r-- | src/erasurecode.c | 2 | ||||
-rw-r--r-- | src/erasurecode_helpers.c | 5 | ||||
-rw-r--r-- | src/erasurecode_postprocessing.c | 9 |
3 files changed, 10 insertions, 6 deletions
diff --git a/src/erasurecode.c b/src/erasurecode.c index f4d7cab..b376568 100644 --- a/src/erasurecode.c +++ b/src/erasurecode.c @@ -998,7 +998,7 @@ int liberasurecode_get_fragment_metadata(char *fragment, uint32_t computed_chksum = 0; uint32_t stored_chksum = fragment_hdr->meta.chksum[0]; char *fragment_data = get_data_ptr_from_fragment(fragment); - uint64_t fragment_size = get_fragment_size(fragment); + uint64_t fragment_size = fragment_hdr->meta.size; computed_chksum = crc32(0, fragment_data, fragment_size); if (stored_chksum != computed_chksum) { fragment_metadata->chksum_mismatch = 1; diff --git a/src/erasurecode_helpers.c b/src/erasurecode_helpers.c index d4484ce..6e4c882 100644 --- a/src/erasurecode_helpers.c +++ b/src/erasurecode_helpers.c @@ -341,7 +341,7 @@ int validate_fragment(char *buf) /* ==~=*=~==~=*=~==~=*=~==~=*=~==~=*=~==~=*=~==~=*=~==~=*=~==~=*=~==~=*=~== */ -inline int set_checksum(char *buf, int blocksize) +inline int set_checksum(ec_checksum_type_t ct, char *buf, int blocksize) { fragment_header_t* header = (fragment_header_t*) buf; char *data = get_data_ptr_from_fragment(buf); @@ -352,6 +352,9 @@ inline int set_checksum(char *buf, int blocksize) return -1; } + header->meta.chksum_type = ct; + header->meta.chksum_mismatch = 0; + switch(header->meta.chksum_type) { case CHKSUM_CRC32: header->meta.chksum[0] = crc32(0, data, blocksize); diff --git a/src/erasurecode_postprocessing.c b/src/erasurecode_postprocessing.c index 864d474..8315d7a 100644 --- a/src/erasurecode_postprocessing.c +++ b/src/erasurecode_postprocessing.c @@ -32,13 +32,13 @@ void add_fragment_metadata(char *fragment, int idx, uint64_t orig_data_size, int blocksize, - int add_chksum) + ec_checksum_type_t ct, int add_chksum) { set_fragment_idx(fragment, idx); set_orig_data_size(fragment, orig_data_size); set_fragment_payload_size(fragment, blocksize); if (add_chksum) { - set_checksum(fragment, blocksize); + set_checksum(ct, fragment, blocksize); } } @@ -47,12 +47,13 @@ int finalize_fragments_after_encode(ec_backend_t instance, char **encoded_data, char **encoded_parity) { int i, set_chksum = 1; + ec_checksum_type_t ct = instance->args.uargs.ct; /* finalize data fragments */ for (i = 0; i < k; i++) { char *fragment = get_fragment_ptr_from_data(encoded_data[i]); add_fragment_metadata(fragment, i, orig_data_size, - blocksize, set_chksum); + blocksize, ct, set_chksum); encoded_data[i] = fragment; } @@ -60,7 +61,7 @@ int finalize_fragments_after_encode(ec_backend_t instance, for (i = 0; i < m; i++) { char *fragment = get_fragment_ptr_from_data(encoded_parity[i]); add_fragment_metadata(fragment, i + k, orig_data_size, - blocksize, set_chksum); + blocksize, ct, set_chksum); encoded_parity[i] = fragment; } |