iUse blk_desc directly and remove cache_entry - 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 f694a0bacfafdbbb2a8e5cd526ae27b28e929792 /scm/dedup/commit/f694a0bacfafdbbb2a8e5cd526ae27b28e929792.gph bitreich.org 70 1parent a855a36113a0833e57edaae139c3123bf392d310 /scm/dedup/commit/a855a36113a0833e57edaae139c3123bf392d310.gph bitreich.org 70 hAuthor: sin URL:mailto:sin@2f30.org bitreich.org 70 iDate: Thu, 7 Mar 2019 10:28:11 +0000 Err bitreich.org 70 i Err bitreich.org 70 iUse blk_desc directly and remove cache_entry Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M cache.c | 22 +++++++++++----------- Err bitreich.org 70 i M dedup.c | 24 +++++------------------- Err bitreich.org 70 i M dedup.h | 14 +++----------- Err bitreich.org 70 i Err bitreich.org 70 i3 files changed, 19 insertions(+), 41 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/cache.c b/cache.c /scm/dedup/file/cache.c.gph bitreich.org 70 i@@ -11,7 +11,7 @@ Err bitreich.org 70 i #include "tree.h" Err bitreich.org 70 i Err bitreich.org 70 i struct cache_node { Err bitreich.org 70 i- struct cache_entry ent; Err bitreich.org 70 i+ struct blk_desc desc; Err bitreich.org 70 i RB_ENTRY(cache_node) e; Err bitreich.org 70 i }; Err bitreich.org 70 i RB_HEAD(cache_head, cache_node); Err bitreich.org 70 i@@ -25,7 +25,7 @@ cache_node_cmp(struct cache_node *e1, struct cache_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->ent.md, e2->ent.md, sizeof(e1->ent.md)); 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@@ -36,14 +36,14 @@ static RB_PROTOTYPE(cache_head, cache_node, e, cache_node_cmp); Err bitreich.org 70 i static RB_GENERATE(cache_head, cache_node, e, cache_node_cmp); Err bitreich.org 70 i Err bitreich.org 70 i static struct cache_node * Err bitreich.org 70 i-alloc_cache_node(struct cache_entry *ent) Err bitreich.org 70 i+alloc_cache_node(struct blk_desc *desc) Err bitreich.org 70 i { Err bitreich.org 70 i struct cache_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->ent = *ent; 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@@ -78,24 +78,24 @@ free_cache(struct cache *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 cache_entry *ent) 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 cache_node *node; Err bitreich.org 70 i Err bitreich.org 70 i- node = alloc_cache_node(ent); Err bitreich.org 70 i+ node = alloc_cache_node(desc); Err bitreich.org 70 i if (RB_INSERT(cache_head, &cache->nodes, node) != NULL) Err bitreich.org 70 i free_cache_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 cache_entry *ent) 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 cache_node *node, key; Err bitreich.org 70 i Err bitreich.org 70 i- key.ent = *ent; 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- *ent = node->ent; 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@@ -103,10 +103,10 @@ lookup_cache_entry(struct cache *cache, struct cache_entry *ent) Err bitreich.org 70 i Err bitreich.org 70 i void Err bitreich.org 70 i walk_cache(struct cache *cache, Err bitreich.org 70 i- int (*fn)(struct cache_entry *, void *), void *arg) Err bitreich.org 70 i+ int (*fn)(struct blk_desc *, void *), void *arg) Err bitreich.org 70 i { Err bitreich.org 70 i struct cache_node *node; Err bitreich.org 70 i Err bitreich.org 70 i RB_FOREACH(node, cache_head, &cache->nodes) Err bitreich.org 70 i- (*fn)(&node->ent, arg); Err bitreich.org 70 i+ (*fn)(&node->desc, arg); 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@@ -225,7 +225,7 @@ static void Err bitreich.org 70 i 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+ struct blk_desc blk_desc; 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@@ -237,20 +237,15 @@ dedup_chunk(struct snapshot *snap, uint8_t *chunkp, size_t chunk_size) Err bitreich.org 70 i snap_hdr.st.orig_size += chunk_size; 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- struct blk_desc blk_desc; Err bitreich.org 70 i- Err bitreich.org 70 i- memcpy(&blk_desc.md, md, sizeof(blk_desc.md)); 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 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- cache_entry.offset = blk_desc.offset; Err bitreich.org 70 i- cache_entry.size = blk_desc.size; Err bitreich.org 70 i- add_cache_entry(cache, &cache_entry); Err bitreich.org 70 i+ add_cache_entry(cache, &blk_desc); Err bitreich.org 70 i cache_misses++; Err bitreich.org 70 i Err bitreich.org 70 i snap_hdr.st.dedup_size += blk_desc.size; Err bitreich.org 70 i@@ -261,11 +256,6 @@ dedup_chunk(struct snapshot *snap, uint8_t *chunkp, size_t chunk_size) Err bitreich.org 70 i if (blk_desc.size < snap_hdr.st.min_blk_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- struct blk_desc blk_desc; Err bitreich.org 70 i- Err bitreich.org 70 i- memcpy(&blk_desc.md, cache_entry.md, sizeof(blk_desc.md)); Err bitreich.org 70 i- blk_desc.offset = cache_entry.offset; Err bitreich.org 70 i- blk_desc.size = cache_entry.size; 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 } Err bitreich.org 70 i@@ -400,14 +390,10 @@ build_cache(struct snapshot *snap, void *arg) Err bitreich.org 70 i 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 Err bitreich.org 70 i blk_desc = &snap->blk_desc[i]; Err bitreich.org 70 i- memcpy(cache_entry.md, blk_desc->md, sizeof(cache_entry.md)); 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- add_cache_entry(cache, &cache_entry); Err bitreich.org 70 i+ add_cache_entry(cache, 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 1diff --git a/dedup.h b/dedup.h /scm/dedup/file/dedup.h.gph bitreich.org 70 i@@ -64,12 +64,6 @@ struct snapshot { 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 cache_entry { Err bitreich.org 70 i- uint8_t md[MDSIZE]; /* hash of block */ Err bitreich.org 70 i- uint64_t offset; /* offset into store file */ 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@@ -79,10 +73,10 @@ extern int verbose; 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 cache_entry *ent); Err bitreich.org 70 i-int lookup_cache_entry(struct cache *cache, struct cache_entry *ent); 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 void walk_cache(struct cache *cache, Err bitreich.org 70 i- int (*fn)(struct cache_entry *, void *), void *arg); Err bitreich.org 70 i+ int (*fn)(struct blk_desc *, void *), void *arg); 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 cap); Err bitreich.org 70 i@@ -108,8 +102,6 @@ void read_snapshot(int fd, struct snapshot *snap); Err bitreich.org 70 i void read_snapshot_descs(int fd, struct snapshot *snap); Err bitreich.org 70 i void write_snapshot(int fd, struct snapshot *snap); Err bitreich.org 70 i void write_snapshot_blk_descs(int fd, struct snapshot *snap); Err bitreich.org 70 i-void read_cache_entry(int fd, struct cache_entry *cache_entry); Err bitreich.org 70 i-void write_cache_entry(int fd, struct cache_entry *cache_entry); Err bitreich.org 70 i Err bitreich.org 70 i /* utils.c */ Err bitreich.org 70 i void str2bin(char *s, uint8_t *d); Err bitreich.org 70 .