iAdd flag to switch between blake2b and blake2bp - 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 c2dba9fa308d74e7ab4740301de5ae88170d41b8 /scm/dedup/commit/c2dba9fa308d74e7ab4740301de5ae88170d41b8.gph bitreich.org 70 1parent 55a0beec4a87dc5ceecb64828c77aef6d49d6805 /scm/dedup/commit/55a0beec4a87dc5ceecb64828c77aef6d49d6805.gph bitreich.org 70 hAuthor: sin URL:mailto:sin@2f30.org bitreich.org 70 iDate: Sat, 6 Apr 2019 18:29:25 +0100 Err bitreich.org 70 i Err bitreich.org 70 iAdd flag to switch between blake2b and blake2bp Err bitreich.org 70 i Err bitreich.org 70 iNeeds some refactoring so the code is not duplicated. Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M dedup.1 | 9 +++++++-- Err bitreich.org 70 i M dedup.c | 75 +++++++++++++++++++++++-------- Err bitreich.org 70 i M dedup.h | 3 +++ Err bitreich.org 70 i Err bitreich.org 70 i3 files changed, 67 insertions(+), 20 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/dedup.1 b/dedup.1 /scm/dedup/file/dedup.1.gph bitreich.org 70 i@@ -1,4 +1,4 @@ Err bitreich.org 70 i-.Dd March 7, 2019 Err bitreich.org 70 i+.Dd April 6, 2019 Err bitreich.org 70 i .Dt DEDUP 1 Err bitreich.org 70 i .Os Err bitreich.org 70 i .Sh NAME Err bitreich.org 70 i@@ -6,7 +6,7 @@ Err bitreich.org 70 i .Nd data deduplication program Err bitreich.org 70 i .Sh SYNOPSIS Err bitreich.org 70 i .Nm dedup Err bitreich.org 70 i-.Op Fl Zcilv Err bitreich.org 70 i+.Op Fl PZcilv Err bitreich.org 70 i .Op Fl e Ar id Err bitreich.org 70 i .Op Fl r Ar root Err bitreich.org 70 i .Op Fl m Ar message Err bitreich.org 70 i@@ -27,6 +27,11 @@ should be used and piped into Err bitreich.org 70 i .Nm . Err bitreich.org 70 i .Sh OPTIONS Err bitreich.org 70 i .Bl -tag -width "-m message" Err bitreich.org 70 i+.It Fl P Err bitreich.org 70 i+Use the blake2bp variant which is a parallel version of blake2b. Err bitreich.org 70 i+These two variants are incompatible as they produce different Err bitreich.org 70 i+hashes. This flag only has an effect when initializing the Err bitreich.org 70 i+repository. By default blake2b is used. Err bitreich.org 70 i .It Fl Z Err bitreich.org 70 i Disable compression support for this repository. Err bitreich.org 70 i This flag only has an effect when initializing the repository. Err bitreich.org 70 1diff --git a/dedup.c b/dedup.c /scm/dedup/file/dedup.c.gph bitreich.org 70 i@@ -33,6 +33,7 @@ static struct blk_hdr blk_hdr; Err bitreich.org 70 i static struct icache *icache; Err bitreich.org 70 i static int ifd; Err bitreich.org 70 i static int sfd; Err bitreich.org 70 i+static int blake2b_parallel; Err bitreich.org 70 i Err bitreich.org 70 i int verbose; Err bitreich.org 70 i char *argv0; Err bitreich.org 70 i@@ -104,17 +105,38 @@ free_snap(struct snap *snap) Err bitreich.org 70 i static void Err bitreich.org 70 i hash_snap(struct snap *snap, uint8_t *md) Err bitreich.org 70 i { Err bitreich.org 70 i- blake2bp_state ctx; Err bitreich.org 70 i- uint64_t i; Err bitreich.org 70 i+ switch (blake2b_parallel) { Err bitreich.org 70 i+ case 0: { Err bitreich.org 70 i+ blake2b_state ctx; Err bitreich.org 70 i+ uint64_t i; Err bitreich.org 70 i+ Err bitreich.org 70 i+ blake2b_init(&ctx, MD_SIZE); 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+ Err bitreich.org 70 i+ blk_desc = &snap->blk_desc[i]; Err bitreich.org 70 i+ blake2b_update(&ctx, blk_desc->md, Err bitreich.org 70 i+ sizeof(blk_desc->md)); Err bitreich.org 70 i+ } Err bitreich.org 70 i+ blake2b_final(&ctx, md, MD_SIZE); Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ case 1: { Err bitreich.org 70 i+ blake2bp_state ctx; Err bitreich.org 70 i+ uint64_t i; Err bitreich.org 70 i Err bitreich.org 70 i- blake2bp_init(&ctx, MD_SIZE); 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+ blake2bp_init(&ctx, MD_SIZE); 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 Err bitreich.org 70 i- blk_desc = &snap->blk_desc[i]; Err bitreich.org 70 i- blake2bp_update(&ctx, blk_desc->md, sizeof(blk_desc->md)); Err bitreich.org 70 i+ blk_desc = &snap->blk_desc[i]; Err bitreich.org 70 i+ blake2bp_update(&ctx, blk_desc->md, Err bitreich.org 70 i+ sizeof(blk_desc->md)); Err bitreich.org 70 i+ } Err bitreich.org 70 i+ blake2bp_final(&ctx, md, MD_SIZE); Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ } Err bitreich.org 70 i } Err bitreich.org 70 i- blake2bp_final(&ctx, md, MD_SIZE); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i static struct snap * Err bitreich.org 70 i@@ -180,11 +202,24 @@ free_buf(uint8_t *buf) Err bitreich.org 70 i static void Err bitreich.org 70 i hash_blk(uint8_t *buf, size_t size, uint8_t *md) Err bitreich.org 70 i { Err bitreich.org 70 i- blake2bp_state ctx; Err bitreich.org 70 i+ switch (blake2b_parallel) { Err bitreich.org 70 i+ case 0: { Err bitreich.org 70 i+ blake2b_state ctx; Err bitreich.org 70 i+ Err bitreich.org 70 i+ blake2b_init(&ctx, MD_SIZE); Err bitreich.org 70 i+ blake2b_update(&ctx, buf, size); Err bitreich.org 70 i+ blake2b_final(&ctx, md, MD_SIZE); Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ case 1: { Err bitreich.org 70 i+ blake2bp_state ctx; Err bitreich.org 70 i Err bitreich.org 70 i- blake2bp_init(&ctx, MD_SIZE); Err bitreich.org 70 i- blake2bp_update(&ctx, buf, size); Err bitreich.org 70 i- blake2bp_final(&ctx, md, MD_SIZE); Err bitreich.org 70 i+ blake2bp_init(&ctx, MD_SIZE); Err bitreich.org 70 i+ blake2bp_update(&ctx, buf, size); Err bitreich.org 70 i+ blake2bp_final(&ctx, md, MD_SIZE); Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ } Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i static void Err bitreich.org 70 i@@ -337,15 +372,11 @@ check_snap(struct snap *snap, void *arg) 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 uint8_t md[MD_SIZE]; Err bitreich.org 70 i- blake2bp_state ctx; Err bitreich.org 70 i struct blk_desc *blk_desc; Err bitreich.org 70 i Err bitreich.org 70 i blk_desc = &snap->blk_desc[i]; Err bitreich.org 70 i read_blk(buf, blk_desc); Err bitreich.org 70 i- Err bitreich.org 70 i- blake2bp_init(&ctx, MD_SIZE); Err bitreich.org 70 i- blake2bp_update(&ctx, buf, blk_desc->size); Err bitreich.org 70 i- blake2bp_final(&ctx, md, MD_SIZE); Err bitreich.org 70 i+ hash_blk(buf, blk_desc->size, md); Err bitreich.org 70 i Err bitreich.org 70 i if (memcmp(blk_desc->md, md, sizeof(blk_desc->md)) == 0) Err bitreich.org 70 i continue; Err bitreich.org 70 i@@ -436,6 +467,7 @@ init_blk_hdr(void) Err bitreich.org 70 i { Err bitreich.org 70 i blk_hdr.flags = (VER_MAJ << VER_MAJ_SHIFT) | VER_MIN; Err bitreich.org 70 i blk_hdr.flags |= compr_enabled << COMPR_ENABLED_SHIFT; Err bitreich.org 70 i+ blk_hdr.flags |= blake2b_parallel << BLAKE2BP_ENABLED_SHIFT; Err bitreich.org 70 i blk_hdr.size = BLK_HDR_SIZE; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i@@ -451,6 +483,10 @@ load_blk_hdr(void) Err bitreich.org 70 i v = blk_hdr.flags >> COMPR_ENABLED_SHIFT; Err bitreich.org 70 i v &= COMPR_ENABLED_MASK; Err bitreich.org 70 i compr_enabled = v; Err bitreich.org 70 i+ Err bitreich.org 70 i+ v = blk_hdr.flags >> BLAKE2BP_ENABLED_SHIFT; Err bitreich.org 70 i+ v &= BLAKE2BP_ENABLED_MASK; Err bitreich.org 70 i+ blake2b_parallel = v; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i static void Err bitreich.org 70 i@@ -537,7 +573,7 @@ term(void) Err bitreich.org 70 i static void Err bitreich.org 70 i usage(void) Err bitreich.org 70 i { Err bitreich.org 70 i- fprintf(stderr, "usage: %s [-Zcilv] [-e id] [-r root] [-m message] [file]\n", argv0); Err bitreich.org 70 i+ fprintf(stderr, "usage: %s [-PZcilv] [-e id] [-r root] [-m message] [file]\n", argv0); Err bitreich.org 70 i exit(1); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i@@ -550,6 +586,9 @@ main(int argc, char *argv[]) Err bitreich.org 70 i int fd = -1; Err bitreich.org 70 i Err bitreich.org 70 i ARGBEGIN { Err bitreich.org 70 i+ case 'P': Err bitreich.org 70 i+ blake2b_parallel = 1; Err bitreich.org 70 i+ break; Err bitreich.org 70 i case 'Z': Err bitreich.org 70 i compr_enabled = 0; Err bitreich.org 70 i break; Err bitreich.org 70 1diff --git a/dedup.h b/dedup.h /scm/dedup/file/dedup.h.gph bitreich.org 70 i@@ -25,6 +25,9 @@ Err bitreich.org 70 i #define COMPR_ENABLED_SHIFT 16 Err bitreich.org 70 i #define COMPR_ENABLED_MASK 0x1 Err bitreich.org 70 i Err bitreich.org 70 i+#define BLAKE2BP_ENABLED_SHIFT 17 Err bitreich.org 70 i+#define BLAKE2BP_ENABLED_MASK 0x1 Err bitreich.org 70 i+ Err bitreich.org 70 i struct icache; Err bitreich.org 70 i struct chunker; Err bitreich.org 70 i Err bitreich.org 70 .