iAdd a mechanism to disable compression - dedup - deduplicating backup program Err bitreich.org 70 hgit clone git://bitreich.org/dedup/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/dedup/ URL:git://bitreich.org/dedup/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/dedup/ bitreich.org 70 1Log /scm/dedup/log.gph bitreich.org 70 1Files /scm/dedup/files.gph bitreich.org 70 1Refs /scm/dedup/refs.gph bitreich.org 70 1Tags /scm/dedup/tag bitreich.org 70 1README /scm/dedup/file/README.gph bitreich.org 70 1LICENSE /scm/dedup/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 1commit b314f213a126fe090d8fa3bb6a9cad0e5dff7ba9 /scm/dedup/commit/b314f213a126fe090d8fa3bb6a9cad0e5dff7ba9.gph bitreich.org 70 1parent 652d81e641e2b9dfbf181c2170ae944640be514f /scm/dedup/commit/652d81e641e2b9dfbf181c2170ae944640be514f.gph bitreich.org 70 hAuthor: sin URL:mailto:sin@2f30.org bitreich.org 70 iDate: Sat, 2 Mar 2019 15:51:14 +0000 Err bitreich.org 70 i Err bitreich.org 70 iAdd a mechanism to disable compression Err bitreich.org 70 i Err bitreich.org 70 iCurrently this can only be set at compile time. It is a matter of Err bitreich.org 70 ihooking it up to a flag or environment variable. Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M Makefile | 2 ++ Err bitreich.org 70 i A config.c | 1 + Err bitreich.org 70 i M dedup.c | 60 +++++++++++++++++++++----------- Err bitreich.org 70 i M dedup.h | 5 ++++- Err bitreich.org 70 i M types.c | 4 ++-- Err bitreich.org 70 i Err bitreich.org 70 i5 files changed, 49 insertions(+), 23 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/Makefile b/Makefile /scm/dedup/file/Makefile.gph bitreich.org 70 i@@ -10,6 +10,7 @@ SRC = \ Err bitreich.org 70 i tree.h \ Err bitreich.org 70 i cache.c \ Err bitreich.org 70 i chunker.c \ Err bitreich.org 70 i+ config.c \ Err bitreich.org 70 i pack.c \ Err bitreich.org 70 i types.c \ Err bitreich.org 70 i unpack.c \ Err bitreich.org 70 i@@ -19,6 +20,7 @@ OBJ = \ Err bitreich.org 70 i $(BIN).o \ Err bitreich.org 70 i cache.o \ Err bitreich.org 70 i chunker.o \ Err bitreich.org 70 i+ config.o \ Err bitreich.org 70 i pack.o \ Err bitreich.org 70 i types.o \ Err bitreich.org 70 i unpack.o \ Err bitreich.org 70 1diff --git a/config.c b/config.c /scm/dedup/file/config.c.gph bitreich.org 70 i@@ -0,0 +1 @@ Err bitreich.org 70 i+int compr_enabled = 1; Err bitreich.org 70 1diff --git a/dedup.c b/dedup.c /scm/dedup/file/dedup.c.gph bitreich.org 70 i@@ -45,9 +45,16 @@ int verbose; Err bitreich.org 70 i char *argv0; Err bitreich.org 70 i Err bitreich.org 70 i static size_t Err bitreich.org 70 i-comp_size(size_t size) Err bitreich.org 70 i+compr_size(size_t size) Err bitreich.org 70 i { Err bitreich.org 70 i- return LZ4_compressBound(size); Err bitreich.org 70 i+ size_t ret; Err bitreich.org 70 i+ Err bitreich.org 70 i+ if (compr_enabled) Err bitreich.org 70 i+ ret = LZ4_compressBound(size); Err bitreich.org 70 i+ else Err bitreich.org 70 i+ ret = size; Err bitreich.org 70 i+ Err bitreich.org 70 i+ return ret; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i static size_t Err bitreich.org 70 i@@ -55,9 +62,16 @@ comp(uint8_t *in, uint8_t *out, size_t insize, size_t outsize) Err bitreich.org 70 i { Err bitreich.org 70 i int ret; Err bitreich.org 70 i Err bitreich.org 70 i- ret = LZ4_compress_default((char *)in, (char *)out, insize, outsize); Err bitreich.org 70 i- if (ret < 0) Err bitreich.org 70 i- errx(1, "LZ4_compress_default failed"); Err bitreich.org 70 i+ if (compr_enabled) { Err bitreich.org 70 i+ ret = LZ4_compress_default((char *)in, (char *)out, insize, Err bitreich.org 70 i+ outsize); Err bitreich.org 70 i+ if (ret < 0) Err bitreich.org 70 i+ errx(1, "LZ4_compress_default failed"); Err bitreich.org 70 i+ } else { Err bitreich.org 70 i+ ret = insize; Err bitreich.org 70 i+ memcpy(out, in, insize); Err bitreich.org 70 i+ } Err bitreich.org 70 i+ Err bitreich.org 70 i return ret; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i@@ -66,9 +80,15 @@ decomp(uint8_t *in, uint8_t *out, size_t insize, size_t outsize) Err bitreich.org 70 i { Err bitreich.org 70 i int ret; Err bitreich.org 70 i Err bitreich.org 70 i- ret = LZ4_decompress_safe((char *)in, (char *)out, insize, outsize); Err bitreich.org 70 i- if (ret < 0) Err bitreich.org 70 i- errx(1, "LZ4_decompress_safe failed"); Err bitreich.org 70 i+ if (compr_enabled) { Err bitreich.org 70 i+ ret = LZ4_decompress_safe((char *)in, (char *)out, insize, outsize); Err bitreich.org 70 i+ if (ret < 0) Err bitreich.org 70 i+ errx(1, "LZ4_decompress_safe failed"); Err bitreich.org 70 i+ } else { Err bitreich.org 70 i+ ret = insize; Err bitreich.org 70 i+ memcpy(out, in, insize); Err bitreich.org 70 i+ } Err bitreich.org 70 i+ Err bitreich.org 70 i return ret; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i@@ -90,7 +110,7 @@ print_stats(struct stats *st) Err bitreich.org 70 i fprintf(stderr, "Original size: %llu bytes\n", Err bitreich.org 70 i (unsigned long long)st->orig_size); Err bitreich.org 70 i fprintf(stderr, "Compressed size: %llu bytes\n", Err bitreich.org 70 i- (unsigned long long)st->comp_size); Err bitreich.org 70 i+ (unsigned long long)st->compr_size); Err bitreich.org 70 i fprintf(stderr, "Deduplicated size: %llu bytes\n", Err bitreich.org 70 i (unsigned long long)st->dedup_size); Err bitreich.org 70 i fprintf(stderr, "Min/avg/max block size: %llu/%llu/%llu bytes\n", Err bitreich.org 70 i@@ -208,16 +228,16 @@ dedup_chunk(struct snapshot *snap, uint8_t *chunkp, size_t chunk_size) Err bitreich.org 70 i { Err bitreich.org 70 i uint8_t md[MDSIZE]; Err bitreich.org 70 i struct cache_entry cache_entry; Err bitreich.org 70 i- uint8_t *comp_buf; Err bitreich.org 70 i+ uint8_t *compr_buf; Err bitreich.org 70 i size_t n; Err bitreich.org 70 i Err bitreich.org 70 i- comp_buf = alloc_buf(comp_size(BLKSIZE_MAX)); Err bitreich.org 70 i+ compr_buf = alloc_buf(compr_size(BLKSIZE_MAX)); Err bitreich.org 70 i Err bitreich.org 70 i- n = comp(chunkp, comp_buf, chunk_size, comp_size(BLKSIZE_MAX)); Err bitreich.org 70 i- hash_blk(comp_buf, n, md); Err bitreich.org 70 i+ n = comp(chunkp, compr_buf, chunk_size, compr_size(BLKSIZE_MAX)); Err bitreich.org 70 i+ hash_blk(compr_buf, n, md); Err bitreich.org 70 i Err bitreich.org 70 i snap_hdr.st.orig_size += chunk_size; Err bitreich.org 70 i- snap_hdr.st.comp_size += n; Err bitreich.org 70 i+ snap_hdr.st.compr_size += n; Err bitreich.org 70 i Err bitreich.org 70 i memcpy(cache_entry.md, md, sizeof(cache_entry.md)); Err bitreich.org 70 i if (lookup_cache_entry(cache, &cache_entry) < 0) { Err bitreich.org 70 i@@ -228,7 +248,7 @@ dedup_chunk(struct snapshot *snap, uint8_t *chunkp, size_t chunk_size) Err bitreich.org 70 i blk_desc.size = n; Err bitreich.org 70 i Err bitreich.org 70 i snap->blk_desc[snap->nr_blk_descs++] = blk_desc; Err bitreich.org 70 i- append_blk(comp_buf, &blk_desc); Err bitreich.org 70 i+ append_blk(compr_buf, &blk_desc); Err bitreich.org 70 i Err bitreich.org 70 i cache_entry.offset = blk_desc.offset; Err bitreich.org 70 i cache_entry.size = blk_desc.size; Err bitreich.org 70 i@@ -253,7 +273,7 @@ dedup_chunk(struct snapshot *snap, uint8_t *chunkp, size_t chunk_size) Err bitreich.org 70 i cache_hits++; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i- free(comp_buf); Err bitreich.org 70 i+ free(compr_buf); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i static void Err bitreich.org 70 i@@ -309,7 +329,7 @@ extract(struct snapshot *snap, void *arg) Err bitreich.org 70 i return WALK_CONTINUE; Err bitreich.org 70 i Err bitreich.org 70 i buf[0] = alloc_buf(BLKSIZE_MAX); Err bitreich.org 70 i- buf[1] = alloc_buf(comp_size(BLKSIZE_MAX)); Err bitreich.org 70 i+ buf[1] = alloc_buf(compr_size(BLKSIZE_MAX)); Err bitreich.org 70 i for (i = 0; i < snap->nr_blk_descs; i++) { Err bitreich.org 70 i struct blk_desc *blk_desc; Err bitreich.org 70 i size_t blksize; Err bitreich.org 70 i@@ -333,7 +353,7 @@ check(struct snapshot *snap, void *arg) Err bitreich.org 70 i SHA256_CTX ctx; Err bitreich.org 70 i uint64_t i; Err bitreich.org 70 i Err bitreich.org 70 i- buf = alloc_buf(comp_size(BLKSIZE_MAX)); Err bitreich.org 70 i+ buf = alloc_buf(compr_size(BLKSIZE_MAX)); Err bitreich.org 70 i /* Err bitreich.org 70 i * Calculate hash for each block and compare Err bitreich.org 70 i * against snapshot entry block descriptor Err bitreich.org 70 i@@ -386,7 +406,7 @@ rebuild_cache(struct snapshot *snap, void *arg) Err bitreich.org 70 i SHA256_CTX ctx; Err bitreich.org 70 i uint64_t i; Err bitreich.org 70 i Err bitreich.org 70 i- buf = alloc_buf(comp_size(BLKSIZE_MAX)); Err bitreich.org 70 i+ buf = alloc_buf(compr_size(BLKSIZE_MAX)); Err bitreich.org 70 i for (i = 0; i < snap->nr_blk_descs; i++) { Err bitreich.org 70 i struct cache_entry cache_entry; Err bitreich.org 70 i struct blk_desc *blk_desc; Err bitreich.org 70 i@@ -513,7 +533,7 @@ init_snap_hdr(void) Err bitreich.org 70 i { Err bitreich.org 70 i snap_hdr.flags = (VER_MAJ << 8) | VER_MIN; Err bitreich.org 70 i snap_hdr.size = SNAP_HDR_SIZE; Err bitreich.org 70 i- snap_hdr.st.min_blk_size = comp_size(BLKSIZE_MAX); Err bitreich.org 70 i+ snap_hdr.st.min_blk_size = compr_size(BLKSIZE_MAX); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i static void Err bitreich.org 70 1diff --git a/dedup.h b/dedup.h /scm/dedup/file/dedup.h.gph bitreich.org 70 i@@ -24,7 +24,7 @@ struct chunker; Err bitreich.org 70 i Err bitreich.org 70 i struct stats { Err bitreich.org 70 i uint64_t orig_size; /* original store size */ Err bitreich.org 70 i- uint64_t comp_size; /* compressed store size */ Err bitreich.org 70 i+ uint64_t compr_size; /* compressed store size */ Err bitreich.org 70 i uint64_t dedup_size; /* deduplicated store size */ Err bitreich.org 70 i uint64_t min_blk_size; Err bitreich.org 70 i uint64_t max_blk_size; Err bitreich.org 70 i@@ -64,6 +64,9 @@ struct cache_entry { Err bitreich.org 70 i uint64_t size; /* size of block */ Err bitreich.org 70 i }; Err bitreich.org 70 i Err bitreich.org 70 i+/* config.c */ Err bitreich.org 70 i+extern int compr_enabled; Err bitreich.org 70 i+ Err bitreich.org 70 i /* dedup.c */ Err bitreich.org 70 i extern int verbose; Err bitreich.org 70 i Err bitreich.org 70 1diff --git a/types.c b/types.c /scm/dedup/file/types.c.gph bitreich.org 70 i@@ -22,7 +22,7 @@ read_snap_hdr(int fd, struct snapshot_hdr *hdr) Err bitreich.org 70 i Err bitreich.org 70 i n += unpack(&buf[n], "qqqqqq", Err bitreich.org 70 i &hdr->st.orig_size, Err bitreich.org 70 i- &hdr->st.comp_size, Err bitreich.org 70 i+ &hdr->st.compr_size, Err bitreich.org 70 i &hdr->st.dedup_size, Err bitreich.org 70 i &hdr->st.min_blk_size, Err bitreich.org 70 i &hdr->st.max_blk_size, Err bitreich.org 70 i@@ -50,7 +50,7 @@ write_snap_hdr(int fd, struct snapshot_hdr *hdr) Err bitreich.org 70 i Err bitreich.org 70 i n += pack(&buf[n], "qqqqqq", Err bitreich.org 70 i hdr->st.orig_size, Err bitreich.org 70 i- hdr->st.comp_size, Err bitreich.org 70 i+ hdr->st.compr_size, Err bitreich.org 70 i hdr->st.dedup_size, Err bitreich.org 70 i hdr->st.min_blk_size, Err bitreich.org 70 i hdr->st.max_blk_size, Err bitreich.org 70 .