iRename cache to icache (index cache) - 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 46584d2ff6fd9566d99fc0298d1037e540afc77c /scm/dedup/commit/46584d2ff6fd9566d99fc0298d1037e540afc77c.gph bitreich.org 70 1parent 2dcf94fae182f1cc856ef0a5984e636466da2009 /scm/dedup/commit/2dcf94fae182f1cc856ef0a5984e636466da2009.gph bitreich.org 70 hAuthor: sin URL:mailto:sin@2f30.org bitreich.org 70 iDate: Sat, 30 Mar 2019 16:06:04 +0000 Err bitreich.org 70 i Err bitreich.org 70 iRename cache to icache (index cache) Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M Makefile | 4 ++-- Err bitreich.org 70 i D cache.c | 100 ------------------------------- Err bitreich.org 70 i M dedup.c | 28 ++++++++++++++-------------- Err bitreich.org 70 i M dedup.h | 12 ++++++------ Err bitreich.org 70 i A icache.c | 100 +++++++++++++++++++++++++++++++ Err bitreich.org 70 i Err bitreich.org 70 i5 files changed, 122 insertions(+), 122 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@@ -11,9 +11,9 @@ SRC = \ Err bitreich.org 70 i dedup.h \ Err bitreich.org 70 i tree.h \ Err bitreich.org 70 i blake2b-ref.c \ Err bitreich.org 70 i- cache.c \ Err bitreich.org 70 i chunker.c \ Err bitreich.org 70 i compress.c \ Err bitreich.org 70 i+ icache.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@@ -22,9 +22,9 @@ SRC = \ Err bitreich.org 70 i OBJ = \ Err bitreich.org 70 i $(BIN).o \ Err bitreich.org 70 i blake2b-ref.o \ Err bitreich.org 70 i- cache.o \ Err bitreich.org 70 i chunker.o \ Err bitreich.org 70 i compress.o \ Err bitreich.org 70 i+ icache.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/cache.c b/cache.c /scm/dedup/file/cache.c.gph bitreich.org 70 i@@ -1,100 +0,0 @@ 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-#include Err bitreich.org 70 i- Err bitreich.org 70 i-#include "dedup.h" Err bitreich.org 70 i-#include "tree.h" Err bitreich.org 70 i- Err bitreich.org 70 i-struct node { Err bitreich.org 70 i- struct blk_desc desc; Err bitreich.org 70 i- RB_ENTRY(node) e; Err bitreich.org 70 i-}; Err bitreich.org 70 i-RB_HEAD(cache_head, node); Err bitreich.org 70 i- Err bitreich.org 70 i-struct cache { Err bitreich.org 70 i- struct cache_head nodes; Err bitreich.org 70 i-}; Err bitreich.org 70 i- Err bitreich.org 70 i-static int Err bitreich.org 70 i-node_cmp(struct node *e1, struct node *e2) Err bitreich.org 70 i-{ Err bitreich.org 70 i- int r; Err bitreich.org 70 i- Err bitreich.org 70 i- r = memcmp(e1->desc.md, e2->desc.md, sizeof(e1->desc.md)); Err bitreich.org 70 i- if (r > 0) Err bitreich.org 70 i- return 1; Err bitreich.org 70 i- else if (r < 0) Err bitreich.org 70 i- return -1; Err bitreich.org 70 i- return 0; Err bitreich.org 70 i-} Err bitreich.org 70 i-static RB_PROTOTYPE(cache_head, node, e, node_cmp); Err bitreich.org 70 i-static RB_GENERATE(cache_head, node, e, node_cmp); Err bitreich.org 70 i- Err bitreich.org 70 i-static struct node * Err bitreich.org 70 i-alloc_node(struct blk_desc *desc) Err bitreich.org 70 i-{ Err bitreich.org 70 i- struct node *node; Err bitreich.org 70 i- Err bitreich.org 70 i- node = calloc(1, sizeof(*node)); Err bitreich.org 70 i- if (node == NULL) Err bitreich.org 70 i- err(1, "calloc"); Err bitreich.org 70 i- node->desc = *desc; Err bitreich.org 70 i- return node; Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-static void Err bitreich.org 70 i-free_node(struct node *node) Err bitreich.org 70 i-{ Err bitreich.org 70 i- free(node); Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-struct cache * Err bitreich.org 70 i-alloc_cache(void) Err bitreich.org 70 i-{ Err bitreich.org 70 i- struct cache *cache; Err bitreich.org 70 i- Err bitreich.org 70 i- cache = calloc(1, sizeof(*cache)); Err bitreich.org 70 i- if (cache == NULL) Err bitreich.org 70 i- err(1, "calloc"); Err bitreich.org 70 i- RB_INIT(&cache->nodes); Err bitreich.org 70 i- return cache; Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-void Err bitreich.org 70 i-free_cache(struct cache *cache) Err bitreich.org 70 i-{ Err bitreich.org 70 i- struct node *node, *tmp; Err bitreich.org 70 i- Err bitreich.org 70 i- RB_FOREACH_SAFE(node, cache_head, &cache->nodes, tmp) { Err bitreich.org 70 i- RB_REMOVE(cache_head, &cache->nodes, node); Err bitreich.org 70 i- free_node(node); Err bitreich.org 70 i- } Err bitreich.org 70 i- free(cache); Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-void Err bitreich.org 70 i-add_cache_entry(struct cache *cache, struct blk_desc *desc) Err bitreich.org 70 i-{ Err bitreich.org 70 i- struct node *node; Err bitreich.org 70 i- Err bitreich.org 70 i- node = alloc_node(desc); Err bitreich.org 70 i- if (RB_INSERT(cache_head, &cache->nodes, node) != NULL) Err bitreich.org 70 i- free_node(node); Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-int Err bitreich.org 70 i-lookup_cache_entry(struct cache *cache, struct blk_desc *desc) Err bitreich.org 70 i-{ Err bitreich.org 70 i- struct node *node, key; Err bitreich.org 70 i- Err bitreich.org 70 i- key.desc = *desc; Err bitreich.org 70 i- node = RB_FIND(cache_head, &cache->nodes, &key); Err bitreich.org 70 i- if (node != NULL) { Err bitreich.org 70 i- *desc = node->desc; Err bitreich.org 70 i- return 0; Err bitreich.org 70 i- } Err bitreich.org 70 i- return -1; Err bitreich.org 70 i-} Err bitreich.org 70 1diff --git a/dedup.c b/dedup.c /scm/dedup/file/dedup.c.gph bitreich.org 70 i@@ -30,11 +30,11 @@ struct extract_args { Err bitreich.org 70 i Err bitreich.org 70 i static struct snap_hdr snap_hdr; Err bitreich.org 70 i static struct blk_hdr blk_hdr; Err bitreich.org 70 i-static struct cache *cache; 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 unsigned long long cache_hits; Err bitreich.org 70 i-static unsigned long long cache_misses; Err bitreich.org 70 i+static unsigned long long icache_hits; Err bitreich.org 70 i+static unsigned long long icache_misses; Err bitreich.org 70 i Err bitreich.org 70 i int verbose; Err bitreich.org 70 i char *argv0; Err bitreich.org 70 i@@ -68,8 +68,8 @@ print_stats(struct stats *st) Err bitreich.org 70 i (unsigned long long)st->max_blk_size); Err bitreich.org 70 i fprintf(stderr, "Number of unique blocks: %llu\n", Err bitreich.org 70 i (unsigned long long)st->nr_blks); Err bitreich.org 70 i- fprintf(stderr, "Cache hits: %llu\n", cache_hits); Err bitreich.org 70 i- fprintf(stderr, "Cache misses: %llu\n", cache_misses); Err bitreich.org 70 i+ fprintf(stderr, "Index cache hits: %llu\n", icache_hits); Err bitreich.org 70 i+ fprintf(stderr, "Index cache misses: %llu\n", icache_misses); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i static struct snap * Err bitreich.org 70 i@@ -220,15 +220,15 @@ dedup_chunk(struct snap *snap, uint8_t *chunkp, size_t chunk_size) Err bitreich.org 70 i snap_hdr.st.compr_size += n; Err bitreich.org 70 i Err bitreich.org 70 i memcpy(blk_desc.md, md, sizeof(blk_desc.md)); Err bitreich.org 70 i- if (lookup_cache_entry(cache, &blk_desc) < 0) { Err bitreich.org 70 i+ if (lookup_icache_entry(icache, &blk_desc) < 0) { Err bitreich.org 70 i blk_desc.offset = blk_hdr.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(compr_buf, &blk_desc); Err bitreich.org 70 i Err bitreich.org 70 i- add_cache_entry(cache, &blk_desc); Err bitreich.org 70 i- cache_misses++; Err bitreich.org 70 i+ add_icache_entry(icache, &blk_desc); Err bitreich.org 70 i+ icache_misses++; Err bitreich.org 70 i Err bitreich.org 70 i snap_hdr.st.dedup_size += blk_desc.size; Err bitreich.org 70 i snap_hdr.st.nr_blks++; Err bitreich.org 70 i@@ -239,7 +239,7 @@ dedup_chunk(struct snap *snap, uint8_t *chunkp, size_t chunk_size) Err bitreich.org 70 i snap_hdr.st.min_blk_size = blk_desc.size; Err bitreich.org 70 i } else { Err bitreich.org 70 i snap->blk_desc[snap->nr_blk_descs++] = blk_desc; Err bitreich.org 70 i- cache_hits++; Err bitreich.org 70 i+ icache_hits++; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i free(compr_buf); Err bitreich.org 70 i@@ -362,7 +362,7 @@ check_snap(struct snap *snap, void *arg) Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i static int Err bitreich.org 70 i-build_cache(struct snap *snap, void *arg) Err bitreich.org 70 i+build_icache(struct snap *snap, void *arg) Err bitreich.org 70 i { Err bitreich.org 70 i uint8_t *buf; Err bitreich.org 70 i uint64_t i; Err bitreich.org 70 i@@ -372,7 +372,7 @@ build_cache(struct snap *snap, void *arg) 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- add_cache_entry(cache, blk_desc); Err bitreich.org 70 i+ add_icache_entry(icache, blk_desc); Err bitreich.org 70 i } Err bitreich.org 70 i free(buf); Err bitreich.org 70 i return WALK_CONTINUE; Err bitreich.org 70 i@@ -506,8 +506,8 @@ init(int iflag) Err bitreich.org 70 i load_blk_hdr(); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i- cache = alloc_cache(); Err bitreich.org 70 i- walk_snap(build_cache, NULL); Err bitreich.org 70 i+ icache = alloc_icache(); Err bitreich.org 70 i+ walk_snap(build_icache, NULL); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i static void Err bitreich.org 70 i@@ -516,7 +516,7 @@ term(void) Err bitreich.org 70 i if (verbose > 0) Err bitreich.org 70 i print_stats(&snap_hdr.st); Err bitreich.org 70 i Err bitreich.org 70 i- free_cache(cache); Err bitreich.org 70 i+ free_icache(icache); Err bitreich.org 70 i Err bitreich.org 70 i save_blk_hdr(); Err bitreich.org 70 i save_snap_hdr(); Err bitreich.org 70 1diff --git a/dedup.h b/dedup.h /scm/dedup/file/dedup.h.gph bitreich.org 70 i@@ -25,7 +25,7 @@ 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-struct cache; Err bitreich.org 70 i+struct icache; Err bitreich.org 70 i struct chunker; Err bitreich.org 70 i Err bitreich.org 70 i struct stats { Err bitreich.org 70 i@@ -70,11 +70,11 @@ extern int compr_enabled; 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-/* cache.c */ Err bitreich.org 70 i-struct cache *alloc_cache(void); Err bitreich.org 70 i-void free_cache(struct cache *cache); Err bitreich.org 70 i-void add_cache_entry(struct cache *cache, struct blk_desc *desc); Err bitreich.org 70 i-int lookup_cache_entry(struct cache *cache, struct blk_desc *desc); Err bitreich.org 70 i+/* icache.c */ Err bitreich.org 70 i+struct icache *alloc_icache(void); Err bitreich.org 70 i+void free_icache(struct icache *icache); Err bitreich.org 70 i+void add_icache_entry(struct icache *icache, struct blk_desc *desc); Err bitreich.org 70 i+int lookup_icache_entry(struct icache *icache, struct blk_desc *desc); Err bitreich.org 70 i Err bitreich.org 70 i /* chunker.c */ Err bitreich.org 70 i struct chunker *alloc_chunker(int fd, size_t min_size, size_t max_size, Err bitreich.org 70 1diff --git a/icache.c b/icache.c /scm/dedup/file/icache.c.gph bitreich.org 70 i@@ -0,0 +1,100 @@ 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+#include Err bitreich.org 70 i+ Err bitreich.org 70 i+#include "dedup.h" Err bitreich.org 70 i+#include "tree.h" Err bitreich.org 70 i+ Err bitreich.org 70 i+struct node { Err bitreich.org 70 i+ struct blk_desc desc; Err bitreich.org 70 i+ RB_ENTRY(node) e; Err bitreich.org 70 i+}; Err bitreich.org 70 i+RB_HEAD(icache_head, node); Err bitreich.org 70 i+ Err bitreich.org 70 i+struct icache { Err bitreich.org 70 i+ struct icache_head nodes; Err bitreich.org 70 i+}; Err bitreich.org 70 i+ Err bitreich.org 70 i+static int Err bitreich.org 70 i+node_cmp(struct node *e1, struct node *e2) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ int r; Err bitreich.org 70 i+ Err bitreich.org 70 i+ r = memcmp(e1->desc.md, e2->desc.md, sizeof(e1->desc.md)); Err bitreich.org 70 i+ if (r > 0) Err bitreich.org 70 i+ return 1; Err bitreich.org 70 i+ else if (r < 0) Err bitreich.org 70 i+ return -1; Err bitreich.org 70 i+ return 0; Err bitreich.org 70 i+} Err bitreich.org 70 i+static RB_PROTOTYPE(icache_head, node, e, node_cmp); Err bitreich.org 70 i+static RB_GENERATE(icache_head, node, e, node_cmp); Err bitreich.org 70 i+ Err bitreich.org 70 i+static struct node * Err bitreich.org 70 i+alloc_node(struct blk_desc *desc) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ struct node *node; Err bitreich.org 70 i+ Err bitreich.org 70 i+ node = calloc(1, sizeof(*node)); Err bitreich.org 70 i+ if (node == NULL) Err bitreich.org 70 i+ err(1, "calloc"); Err bitreich.org 70 i+ node->desc = *desc; Err bitreich.org 70 i+ return node; Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+static void Err bitreich.org 70 i+free_node(struct node *node) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ free(node); Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+struct icache * Err bitreich.org 70 i+alloc_icache(void) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ struct icache *icache; Err bitreich.org 70 i+ Err bitreich.org 70 i+ icache = calloc(1, sizeof(*icache)); Err bitreich.org 70 i+ if (icache == NULL) Err bitreich.org 70 i+ err(1, "calloc"); Err bitreich.org 70 i+ RB_INIT(&icache->nodes); Err bitreich.org 70 i+ return icache; Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+void Err bitreich.org 70 i+free_icache(struct icache *icache) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ struct node *node, *tmp; Err bitreich.org 70 i+ Err bitreich.org 70 i+ RB_FOREACH_SAFE(node, icache_head, &icache->nodes, tmp) { Err bitreich.org 70 i+ RB_REMOVE(icache_head, &icache->nodes, node); Err bitreich.org 70 i+ free_node(node); Err bitreich.org 70 i+ } Err bitreich.org 70 i+ free(icache); Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+void Err bitreich.org 70 i+add_icache_entry(struct icache *icache, struct blk_desc *desc) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ struct node *node; Err bitreich.org 70 i+ Err bitreich.org 70 i+ node = alloc_node(desc); Err bitreich.org 70 i+ if (RB_INSERT(icache_head, &icache->nodes, node) != NULL) Err bitreich.org 70 i+ free_node(node); Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+int Err bitreich.org 70 i+lookup_icache_entry(struct icache *icache, struct blk_desc *desc) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ struct node *node, key; Err bitreich.org 70 i+ Err bitreich.org 70 i+ key.desc = *desc; Err bitreich.org 70 i+ node = RB_FIND(icache_head, &icache->nodes, &key); Err bitreich.org 70 i+ if (node != NULL) { Err bitreich.org 70 i+ *desc = node->desc; Err bitreich.org 70 i+ return 0; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ return -1; Err bitreich.org 70 i+} Err bitreich.org 70 .