iOptimize chunking by always refilling buffer - 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 e2df9c742065bd99e3d5580ff68d456c4e4e1388 /scm/dedup/commit/e2df9c742065bd99e3d5580ff68d456c4e4e1388.gph bitreich.org 70 1parent 9ffbdb14b746f421734fd66435a330b033edbad6 /scm/dedup/commit/9ffbdb14b746f421734fd66435a330b033edbad6.gph bitreich.org 70 hAuthor: z3bra URL:mailto:contactatz3bradotorg bitreich.org 70 iDate: Mon, 18 Feb 2019 17:02:14 +0100 Err bitreich.org 70 i Err bitreich.org 70 iOptimize chunking by always refilling buffer Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M dedup.c | 76 ++++++++++++++++---------------- Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 38 insertions(+), 38 deletions(-) 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@@ -409,64 +409,64 @@ dedup(int fd, char *msg) Err bitreich.org 70 i uint8_t *buf[2]; Err bitreich.org 70 i struct ent *ent; Err bitreich.org 70 i SHA256_CTX ctx; Err bitreich.org 70 i- ssize_t n; Err bitreich.org 70 i+ ssize_t n, bufsize; Err bitreich.org 70 i Err bitreich.org 70 i buf[0] = alloc_buf(BLKSIZE); Err bitreich.org 70 i buf[1] = alloc_buf(comp_size(BLKSIZE)); Err bitreich.org 70 i ent = alloc_ent(); Err bitreich.org 70 i Err bitreich.org 70 i+ bufsize = 0; Err bitreich.org 70 i SHA256_Init(&ctx); Err bitreich.org 70 i- while ((n = xread(fd, buf[0], BLKSIZE)) > 0) { Err bitreich.org 70 i+ while ((n = xread(fd, buf[0] + bufsize, BLKSIZE - bufsize)) > 0 || bufsize > 0) { Err bitreich.org 70 i+ uint8_t md[MDSIZE]; Err bitreich.org 70 i+ struct bdescr bdescr; Err bitreich.org 70 i+ size_t blksize, csize; Err bitreich.org 70 i uint8_t *inp = buf[0]; /* input buf */ Err bitreich.org 70 i uint8_t *outp = buf[1]; /* compressed buf */ Err bitreich.org 70 i Err bitreich.org 70 i- enthdr.st.total_bytes += n; Err bitreich.org 70 i- Err bitreich.org 70 i- /* Split input buffer in chunks */ Err bitreich.org 70 i- while (n > 0) { Err bitreich.org 70 i- uint8_t md[MDSIZE]; Err bitreich.org 70 i- struct bdescr bdescr; Err bitreich.org 70 i- size_t blksize, csize; Err bitreich.org 70 i- Err bitreich.org 70 i- blksize = chunk_blk(inp, n); Err bitreich.org 70 i- csize = comp(inp, outp, blksize, comp_size(BLKSIZE)); Err bitreich.org 70 i+ if (n > 0) { Err bitreich.org 70 i+ bufsize += n; Err bitreich.org 70 i+ enthdr.st.total_bytes += n; Err bitreich.org 70 i+ } Err bitreich.org 70 i Err bitreich.org 70 i- memcpy(bdescr.md, md, sizeof(bdescr)); Err bitreich.org 70 i- bdescr.offset = enthdr.store_size; Err bitreich.org 70 i- bdescr.size = csize; Err bitreich.org 70 i+ blksize = chunk_blk(inp, bufsize); Err bitreich.org 70 i+ csize = comp(inp, outp, blksize, comp_size(BLKSIZE)); Err bitreich.org 70 i Err bitreich.org 70 i- hash_blk(outp, bdescr.size, bdescr.md); Err bitreich.org 70 i+ memcpy(bdescr.md, md, sizeof(bdescr)); Err bitreich.org 70 i+ bdescr.offset = enthdr.store_size; Err bitreich.org 70 i+ bdescr.size = csize; Err bitreich.org 70 i Err bitreich.org 70 i- /* Calculate file hash one block at a time */ Err bitreich.org 70 i- SHA256_Update(&ctx, outp, bdescr.size); Err bitreich.org 70 i+ hash_blk(outp, bdescr.size, bdescr.md); Err bitreich.org 70 i Err bitreich.org 70 i- ent = grow_ent(ent, ent->nblks + 1); Err bitreich.org 70 i+ /* Calculate file hash one block at a time */ Err bitreich.org 70 i+ SHA256_Update(&ctx, outp, bdescr.size); Err bitreich.org 70 i Err bitreich.org 70 i- if (lookup_blk(bdescr.md) < 0) { Err bitreich.org 70 i- struct cent *cent; Err bitreich.org 70 i+ ent = grow_ent(ent, ent->nblks + 1); Err bitreich.org 70 i Err bitreich.org 70 i- /* Update index entry */ Err bitreich.org 70 i- ent->bdescr[ent->nblks++] = bdescr; Err bitreich.org 70 i+ if (lookup_blk(bdescr.md) < 0) { Err bitreich.org 70 i+ struct cent *cent; Err bitreich.org 70 i Err bitreich.org 70 i- /* Store block */ Err bitreich.org 70 i- append_blk(outp, &bdescr); Err bitreich.org 70 i+ /* Update index entry */ Err bitreich.org 70 i+ ent->bdescr[ent->nblks++] = bdescr; Err bitreich.org 70 i Err bitreich.org 70 i- /* Create a cache entry for this block */ Err bitreich.org 70 i- cent = alloc_cent(); Err bitreich.org 70 i- cent->bdescr = bdescr; Err bitreich.org 70 i- add_cent(cent); Err bitreich.org 70 i- cache_dirty = 1; Err bitreich.org 70 i+ /* Store block */ Err bitreich.org 70 i+ append_blk(outp, &bdescr); Err bitreich.org 70 i Err bitreich.org 70 i- enthdr.st.actual_bytes += bdescr.size; Err bitreich.org 70 i- enthdr.st.cache_misses++; Err bitreich.org 70 i- } else { Err bitreich.org 70 i- ent->bdescr[ent->nblks++] = bdescr; Err bitreich.org 70 i- enthdr.st.cache_hits++; Err bitreich.org 70 i- } Err bitreich.org 70 i+ /* Create a cache entry for this block */ Err bitreich.org 70 i+ cent = alloc_cent(); Err bitreich.org 70 i+ cent->bdescr = bdescr; Err bitreich.org 70 i+ add_cent(cent); Err bitreich.org 70 i+ cache_dirty = 1; Err bitreich.org 70 i Err bitreich.org 70 i- inp += blksize; Err bitreich.org 70 i- n -= blksize; Err bitreich.org 70 i+ enthdr.st.actual_bytes += bdescr.size; Err bitreich.org 70 i+ enthdr.st.cache_misses++; Err bitreich.org 70 i+ } else { Err bitreich.org 70 i+ ent->bdescr[ent->nblks++] = bdescr; Err bitreich.org 70 i+ enthdr.st.cache_hits++; Err bitreich.org 70 i } Err bitreich.org 70 i+ Err bitreich.org 70 i+ memmove(inp, inp + blksize, bufsize - blksize); Err bitreich.org 70 i+ bufsize -= blksize; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i if (ent->nblks > 0) { Err bitreich.org 70 .