iAdd mini compressor framework - 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 f07513053f8662fac3f909bb6e2cdf895b567cb3 /scm/dedup/commit/f07513053f8662fac3f909bb6e2cdf895b567cb3.gph bitreich.org 70 1parent 7f984c9b4136d768e72f31d99666b72bca12d7f2 /scm/dedup/commit/7f984c9b4136d768e72f31d99666b72bca12d7f2.gph bitreich.org 70 hAuthor: sin URL:mailto:sin@2f30.org bitreich.org 70 iDate: Sun, 7 Apr 2019 13:25:45 +0100 Err bitreich.org 70 i Err bitreich.org 70 iAdd mini compressor framework Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M compress.c | 184 +++++++++++++++++++++++++------ Err bitreich.org 70 i M dedup.1 | 11 +++++++---- Err bitreich.org 70 i M dedup.c | 45 +++++++++++++++++++++---------- Err bitreich.org 70 i M dedup.h | 27 +++++++++++++++++++-------- Err bitreich.org 70 i M hash.c | 2 +- Err bitreich.org 70 i Err bitreich.org 70 i5 files changed, 208 insertions(+), 61 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/compress.c b/compress.c /scm/dedup/file/compress.c.gph bitreich.org 70 i@@ -1,56 +1,172 @@ Err bitreich.org 70 i+#include Err bitreich.org 70 i+ Err bitreich.org 70 i #include Err bitreich.org 70 i #include Err bitreich.org 70 i #include Err bitreich.org 70 i Err bitreich.org 70 i #include Err bitreich.org 70 i Err bitreich.org 70 i-int compr_enabled = 1; Err bitreich.org 70 i+#include "blake2.h" Err bitreich.org 70 i+#include "dedup.h" Err bitreich.org 70 i Err bitreich.org 70 i-size_t Err bitreich.org 70 i-compr_size(size_t size) Err bitreich.org 70 i+static int none_init(struct compr_ctx *ctx); Err bitreich.org 70 i+static size_t none_size(struct compr_ctx *ctx, size_t n); Err bitreich.org 70 i+static size_t none_compr(struct compr_ctx *ctx, const void *in, void *out, Err bitreich.org 70 i+ size_t insize, size_t outsize); Err bitreich.org 70 i+static size_t none_decompr(struct compr_ctx *ctx, const void *in, void *out, Err bitreich.org 70 i+ size_t insize, size_t outsize); Err bitreich.org 70 i+ Err bitreich.org 70 i+static int lz4_init(struct compr_ctx *ctx); Err bitreich.org 70 i+static size_t lz4_size(struct compr_ctx *ctx, size_t n); Err bitreich.org 70 i+static size_t lz4_compr(struct compr_ctx *ctx, const void *in, void *out, Err bitreich.org 70 i+ size_t insize, size_t outsize); Err bitreich.org 70 i+static size_t lz4_decompr(struct compr_ctx *ctx, const void *in, void *out, Err bitreich.org 70 i+ size_t insize, size_t outsize); Err bitreich.org 70 i+ Err bitreich.org 70 i+static struct compr_ops { Err bitreich.org 70 i+ int (*init)(struct compr_ctx *ctx); Err bitreich.org 70 i+ size_t (*size)(struct compr_ctx *ctx, size_t n); Err bitreich.org 70 i+ size_t (*compr)(struct compr_ctx *ctx, const void *in, void *out, Err bitreich.org 70 i+ size_t insize, size_t outsize); Err bitreich.org 70 i+ size_t (*decompr)(struct compr_ctx *ctx, const void *in, void *out, Err bitreich.org 70 i+ size_t insize, size_t outsize); Err bitreich.org 70 i+} comprs[NR_COMPRS] = { Err bitreich.org 70 i+ { Err bitreich.org 70 i+ .init = none_init, Err bitreich.org 70 i+ .size = none_size, Err bitreich.org 70 i+ .compr = none_compr, Err bitreich.org 70 i+ .decompr = none_decompr, Err bitreich.org 70 i+ }, Err bitreich.org 70 i+ { Err bitreich.org 70 i+ .init = lz4_init, Err bitreich.org 70 i+ .size = lz4_size, Err bitreich.org 70 i+ .compr = lz4_compr, Err bitreich.org 70 i+ .decompr = lz4_decompr, Err bitreich.org 70 i+ }, Err bitreich.org 70 i+}; Err bitreich.org 70 i+ Err bitreich.org 70 i+static struct algomap { Err bitreich.org 70 i+ char *name; Err bitreich.org 70 i+ int type; Err bitreich.org 70 i+} algomap[] = { Err bitreich.org 70 i+ { Err bitreich.org 70 i+ .name = "none", Err bitreich.org 70 i+ .type = COMPR_NONE, Err bitreich.org 70 i+ }, Err bitreich.org 70 i+ { Err bitreich.org 70 i+ .name = "lz4", Err bitreich.org 70 i+ .type = COMPR_LZ4, Err bitreich.org 70 i+ }, Err bitreich.org 70 i+ { Err bitreich.org 70 i+ .name = NULL, Err bitreich.org 70 i+ }, Err bitreich.org 70 i+}; Err bitreich.org 70 i+ Err bitreich.org 70 i+static int Err bitreich.org 70 i+none_init(struct compr_ctx *ctx) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ return 0; Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+static size_t Err bitreich.org 70 i+none_size(struct compr_ctx *ctx, size_t n) Err bitreich.org 70 i { Err bitreich.org 70 i- size_t ret; Err bitreich.org 70 i+ return n; Err bitreich.org 70 i+} 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+static size_t Err bitreich.org 70 i+none_compr(struct compr_ctx *ctx, const void *in, void *out, Err bitreich.org 70 i+ size_t insize, size_t outsize) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ memcpy(out, in, insize); Err bitreich.org 70 i+ return insize; Err bitreich.org 70 i+} Err bitreich.org 70 i Err bitreich.org 70 i- return ret; Err bitreich.org 70 i+static size_t Err bitreich.org 70 i+none_decompr(struct compr_ctx *ctx, const void *in, void *out, Err bitreich.org 70 i+ size_t insize, size_t outsize) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ memcpy(out, in, insize); Err bitreich.org 70 i+ return insize; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i-size_t Err bitreich.org 70 i-compr(uint8_t *in, uint8_t *out, size_t insize, size_t outsize) Err bitreich.org 70 i+static int Err bitreich.org 70 i+lz4_init(struct compr_ctx *ctx) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ return 0; Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+static size_t Err bitreich.org 70 i+lz4_size(struct compr_ctx *ctx, size_t n) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ return LZ4_compressBound(n); Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+static size_t Err bitreich.org 70 i+lz4_compr(struct compr_ctx *ctx, const void *in, void *out, Err bitreich.org 70 i+ size_t insize, size_t outsize) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ int n; Err bitreich.org 70 i+ Err bitreich.org 70 i+ n = LZ4_compress_default((char *)in, (char *)out, insize, Err bitreich.org 70 i+ outsize); Err bitreich.org 70 i+ if (n < 0) Err bitreich.org 70 i+ errx(1, "LZ4_compress_default failed"); Err bitreich.org 70 i+ return n; Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+static size_t Err bitreich.org 70 i+lz4_decompr(struct compr_ctx *ctx, const void *in, void *out, Err bitreich.org 70 i+ size_t insize, size_t outsize) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ int n; Err bitreich.org 70 i+ Err bitreich.org 70 i+ n = LZ4_decompress_safe((char *)in, (char *)out, insize, Err bitreich.org 70 i+ outsize); Err bitreich.org 70 i+ if (n < 0) Err bitreich.org 70 i+ errx(1, "LZ4_decompress_safe failed"); Err bitreich.org 70 i+ return n; Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+int Err bitreich.org 70 i+compr_init(struct compr_ctx *ctx, int type) Err bitreich.org 70 i { Err bitreich.org 70 i- int ret; Err bitreich.org 70 i+ if (type < 0 || type >= NR_COMPRS) Err bitreich.org 70 i+ return -1; Err bitreich.org 70 i 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+ ctx->ops = &comprs[type]; Err bitreich.org 70 i+ return (*ctx->ops->init)(ctx); Err bitreich.org 70 i+} Err bitreich.org 70 i Err bitreich.org 70 i- return ret; Err bitreich.org 70 i+int Err bitreich.org 70 i+compr_size(struct compr_ctx *ctx, size_t n) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ return (*ctx->ops->size)(ctx, n); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i size_t Err bitreich.org 70 i-decompr(uint8_t *in, uint8_t *out, size_t insize, size_t outsize) Err bitreich.org 70 i+compr(struct compr_ctx *ctx, const void *in, void *out, Err bitreich.org 70 i+ size_t insize, size_t outsize) Err bitreich.org 70 i { Err bitreich.org 70 i- int ret; Err bitreich.org 70 i+ return (*ctx->ops->compr)(ctx, in, out, insize, outsize); Err bitreich.org 70 i+} Err bitreich.org 70 i Err bitreich.org 70 i- if (compr_enabled) { Err bitreich.org 70 i- ret = LZ4_decompress_safe((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_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+size_t Err bitreich.org 70 i+decompr(struct compr_ctx *ctx, const void *in, void *out, Err bitreich.org 70 i+ size_t insize, size_t outsize) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ return (*ctx->ops->decompr)(ctx, in, out, insize, outsize); Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+int Err bitreich.org 70 i+compr_name2type(char *name) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ struct algomap *algo; Err bitreich.org 70 i Err bitreich.org 70 i- return ret; Err bitreich.org 70 i+ for (algo = &algomap[0]; algo->name != NULL; algo++) Err bitreich.org 70 i+ if (strcmp(algo->name, name) == 0) Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ if (algo->name == NULL) Err bitreich.org 70 i+ return -1; Err bitreich.org 70 i+ return algo->type; 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@@ -6,8 +6,9 @@ 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 cilv Err bitreich.org 70 i .Op Fl H Ar hash Err bitreich.org 70 i+.Op Fl Z Ar compressor 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@@ -34,10 +35,12 @@ unique blocks in the store. Err bitreich.org 70 i The supported hash functions are blake2b and blake2bp. Err bitreich.org 70 i This flag only has an effect when initializing the repository. Err bitreich.org 70 i 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+.It Fl Z Ar compressor Err bitreich.org 70 i+The compressor function used to compress the blocks Err bitreich.org 70 i+in the store. Err bitreich.org 70 i+The supported compressor functions are none and lz4. Err bitreich.org 70 i This flag only has an effect when initializing the repository. Err bitreich.org 70 i-By default compression is enabled. Err bitreich.org 70 i+By default lz4 is used. Err bitreich.org 70 i .It Fl c Err bitreich.org 70 i Perform a consistency check on the repository. Err bitreich.org 70 i .It Fl i Err bitreich.org 70 1diff --git a/dedup.c b/dedup.c /scm/dedup/file/dedup.c.gph bitreich.org 70 i@@ -34,6 +34,7 @@ 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 hash_algo; Err bitreich.org 70 i+static int compr_algo; Err bitreich.org 70 i Err bitreich.org 70 i int verbose; Err bitreich.org 70 i char *argv0; Err bitreich.org 70 i@@ -217,12 +218,15 @@ dedup_chunk(struct snap *snap, uint8_t *chunkp, size_t chunk_size) Err bitreich.org 70 i { Err bitreich.org 70 i uint8_t md[MD_SIZE]; Err bitreich.org 70 i struct blk_desc blk_desc; Err bitreich.org 70 i+ struct compr_ctx ctx; Err bitreich.org 70 i uint8_t *compr_buf; Err bitreich.org 70 i- size_t n; Err bitreich.org 70 i+ size_t n, csize; Err bitreich.org 70 i Err bitreich.org 70 i- compr_buf = alloc_buf(compr_size(BLKSIZE_MAX)); Err bitreich.org 70 i+ compr_init(&ctx, compr_algo); Err bitreich.org 70 i+ csize = compr_size(&ctx, BLKSIZE_MAX); Err bitreich.org 70 i+ compr_buf = alloc_buf(csize); Err bitreich.org 70 i Err bitreich.org 70 i- n = compr(chunkp, compr_buf, chunk_size, compr_size(BLKSIZE_MAX)); Err bitreich.org 70 i+ n = compr(&ctx, chunkp, compr_buf, chunk_size, csize); 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@@ -295,20 +299,22 @@ extract(struct snap *snap, void *arg) Err bitreich.org 70 i { Err bitreich.org 70 i uint8_t *buf[2]; Err bitreich.org 70 i struct extract_args *args = arg; Err bitreich.org 70 i+ struct compr_ctx ctx; Err bitreich.org 70 i uint64_t i; Err bitreich.org 70 i Err bitreich.org 70 i if (memcmp(snap->md, args->md, sizeof(snap->md)) != 0) Err bitreich.org 70 i return WALK_CONTINUE; Err bitreich.org 70 i Err bitreich.org 70 i+ compr_init(&ctx, compr_algo); Err bitreich.org 70 i buf[0] = alloc_buf(BLKSIZE_MAX); Err bitreich.org 70 i- buf[1] = alloc_buf(compr_size(BLKSIZE_MAX)); Err bitreich.org 70 i+ buf[1] = alloc_buf(compr_size(&ctx, 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 Err bitreich.org 70 i blk_desc = &snap->blk_desc[i]; Err bitreich.org 70 i read_blk(buf[1], blk_desc); Err bitreich.org 70 i- blksize = decompr(buf[1], buf[0], blk_desc->size, BLKSIZE_MAX); Err bitreich.org 70 i+ blksize = decompr(&ctx, buf[1], buf[0], blk_desc->size, BLKSIZE_MAX); Err bitreich.org 70 i xwrite(args->fd, buf[0], blksize); Err bitreich.org 70 i } Err bitreich.org 70 i free_buf(buf[1]); Err bitreich.org 70 i@@ -325,6 +331,7 @@ extract(struct snap *snap, void *arg) Err bitreich.org 70 i static int Err bitreich.org 70 i check_snap(struct snap *snap, void *arg) Err bitreich.org 70 i { Err bitreich.org 70 i+ struct compr_ctx ctx; Err bitreich.org 70 i uint8_t *buf; Err bitreich.org 70 i int *ret = arg; Err bitreich.org 70 i uint64_t i; Err bitreich.org 70 i@@ -335,7 +342,8 @@ check_snap(struct snap *snap, void *arg) Err bitreich.org 70 i fputc('\n', stderr); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i- buf = alloc_buf(compr_size(BLKSIZE_MAX)); Err bitreich.org 70 i+ compr_init(&ctx, compr_algo); Err bitreich.org 70 i+ buf = alloc_buf(compr_size(&ctx, 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 struct blk_desc *blk_desc; Err bitreich.org 70 i@@ -367,10 +375,12 @@ check_snap(struct snap *snap, void *arg) Err bitreich.org 70 i static int Err bitreich.org 70 i build_icache(struct snap *snap, void *arg) Err bitreich.org 70 i { Err bitreich.org 70 i+ struct compr_ctx ctx; Err bitreich.org 70 i uint8_t *buf; Err bitreich.org 70 i uint64_t i; Err bitreich.org 70 i Err bitreich.org 70 i- buf = alloc_buf(compr_size(BLKSIZE_MAX)); Err bitreich.org 70 i+ compr_init(&ctx, compr_algo); Err bitreich.org 70 i+ buf = alloc_buf(compr_size(&ctx, 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 Err bitreich.org 70 i@@ -432,7 +442,7 @@ static void Err bitreich.org 70 i 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 |= compr_algo << COMPR_ALGO_SHIFT; Err bitreich.org 70 i blk_hdr.flags |= hash_algo << HASH_ALGO_SHIFT; Err bitreich.org 70 i blk_hdr.size = BLK_HDR_SIZE; Err bitreich.org 70 i } Err bitreich.org 70 i@@ -446,9 +456,9 @@ load_blk_hdr(void) Err bitreich.org 70 i read_blk_hdr(sfd, &blk_hdr); Err bitreich.org 70 i match_ver(blk_hdr.flags); Err bitreich.org 70 i 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+ v = blk_hdr.flags >> COMPR_ALGO_SHIFT; Err bitreich.org 70 i+ v &= COMPR_ALGO_MASK; Err bitreich.org 70 i+ compr_algo = v; Err bitreich.org 70 i Err bitreich.org 70 i v = blk_hdr.flags >> HASH_ALGO_SHIFT; Err bitreich.org 70 i v &= HASH_ALGO_MASK; Err bitreich.org 70 i@@ -465,9 +475,12 @@ save_blk_hdr(void) Err bitreich.org 70 i static void Err bitreich.org 70 i init_snap_hdr(void) Err bitreich.org 70 i { Err bitreich.org 70 i+ struct compr_ctx ctx; Err bitreich.org 70 i+ Err bitreich.org 70 i+ compr_init(&ctx, compr_algo); Err bitreich.org 70 i snap_hdr.flags = (VER_MAJ << VER_MAJ_SHIFT) | VER_MIN; Err bitreich.org 70 i snap_hdr.size = SNAP_HDR_SIZE; Err bitreich.org 70 i- snap_hdr.st.min_blk_size = compr_size(BLKSIZE_MAX); Err bitreich.org 70 i+ snap_hdr.st.min_blk_size = compr_size(&ctx, BLKSIZE_MAX); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i static void Err bitreich.org 70 i@@ -539,7 +552,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] [-H hash] [-e id] [-r root] [-m message] [file]\n", argv0); Err bitreich.org 70 i+ fprintf(stderr, "usage: %s [cilv] [-Z compressor] [-H hash] [-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@@ -548,6 +561,7 @@ main(int argc, char *argv[]) Err bitreich.org 70 i { Err bitreich.org 70 i uint8_t md[MD_SIZE]; Err bitreich.org 70 i char *id = NULL, *root = NULL, *msg = NULL, *hash_name = NULL; Err bitreich.org 70 i+ char *compr_name; Err bitreich.org 70 i int iflag = 0, lflag = 0, cflag = 0; Err bitreich.org 70 i int fd = -1; Err bitreich.org 70 i Err bitreich.org 70 i@@ -559,7 +573,10 @@ main(int argc, char *argv[]) Err bitreich.org 70 i errx(1, "unknown hash: %s", hash_name); 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+ compr_name = EARGF(usage()); Err bitreich.org 70 i+ compr_algo = compr_name2type(compr_name); Err bitreich.org 70 i+ if (compr_algo < 0) Err bitreich.org 70 i+ errx(1, "unknown hash: %s", compr_name); Err bitreich.org 70 i break; Err bitreich.org 70 i case 'c': Err bitreich.org 70 i cflag = 1; Err bitreich.org 70 1diff --git a/dedup.h b/dedup.h /scm/dedup/file/dedup.h.gph bitreich.org 70 i@@ -24,8 +24,14 @@ Err bitreich.org 70 i Err bitreich.org 70 i #define HASH_ALGO_SHIFT 18 Err bitreich.org 70 i #define HASH_ALGO_MASK 0x7 /* max 8 hash algos */ Err bitreich.org 70 i-#define COMPR_ENABLED_SHIFT 16 Err bitreich.org 70 i-#define COMPR_ENABLED_MASK 0x3 /* max 4 compression algos */ Err bitreich.org 70 i+#define COMPR_ALGO_SHIFT 16 Err bitreich.org 70 i+#define COMPR_ALGO_MASK 0x3 /* max 4 compression algos */ Err bitreich.org 70 i+ Err bitreich.org 70 i+enum compr_algo { Err bitreich.org 70 i+ COMPR_NONE, Err bitreich.org 70 i+ COMPR_LZ4, Err bitreich.org 70 i+ NR_COMPRS, Err bitreich.org 70 i+}; Err bitreich.org 70 i Err bitreich.org 70 i enum hash_algo { Err bitreich.org 70 i BLAKE2B_ALGO, Err bitreich.org 70 i@@ -72,6 +78,10 @@ struct snap { Err bitreich.org 70 i struct blk_desc blk_desc[]; Err bitreich.org 70 i }; Err bitreich.org 70 i Err bitreich.org 70 i+struct compr_ctx { Err bitreich.org 70 i+ struct compr_ops *ops; Err bitreich.org 70 i+}; Err bitreich.org 70 i+ Err bitreich.org 70 i struct hash_ctx { Err bitreich.org 70 i union { Err bitreich.org 70 i blake2b_state blake2b_ctx; Err bitreich.org 70 i@@ -80,9 +90,6 @@ struct hash_ctx { Err bitreich.org 70 i struct hash_ops *ops; Err bitreich.org 70 i }; Err bitreich.org 70 i Err bitreich.org 70 i-/* compress.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 i@@ -95,9 +102,13 @@ uint8_t *get_chunk(struct chunker *chunker, size_t *chunk_size); Err bitreich.org 70 i void drain_chunker(struct chunker *chunker); Err bitreich.org 70 i Err bitreich.org 70 i /* compress.c */ Err bitreich.org 70 i-size_t compr_size(size_t size); Err bitreich.org 70 i-size_t compr(uint8_t *in, uint8_t *out, size_t insize, size_t outsize); Err bitreich.org 70 i-size_t decompr(uint8_t *in, uint8_t *out, size_t insize, size_t outsize); Err bitreich.org 70 i+int compr_init(struct compr_ctx *ctx, int type); Err bitreich.org 70 i+int compr_size(struct compr_ctx *ctx, size_t n); Err bitreich.org 70 i+size_t compr(struct compr_ctx *ctx, const void *in, void *out, Err bitreich.org 70 i+ size_t insize, size_t outsize); Err bitreich.org 70 i+size_t decompr(struct compr_ctx *ctx, const void *in, void *out, Err bitreich.org 70 i+ size_t insize, size_t outsize); Err bitreich.org 70 i+int compr_name2type(char *name); Err bitreich.org 70 i Err bitreich.org 70 i /* hash.c */ Err bitreich.org 70 i int hash_init(struct hash_ctx *ctx, int type, size_t n); Err bitreich.org 70 1diff --git a/hash.c b/hash.c /scm/dedup/file/hash.c.gph bitreich.org 70 i@@ -27,7 +27,7 @@ static struct hash_ops { Err bitreich.org 70 i .init = blake2bpi, Err bitreich.org 70 i .update = blake2bpu, Err bitreich.org 70 i .final = blake2bpf, 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 struct algomap { Err bitreich.org 70 .