iCheck buffer size in chunk_blk() - 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 07c41115923df14d48ec16279ed14dcb0df598e1 /scm/dedup/commit/07c41115923df14d48ec16279ed14dcb0df598e1.gph bitreich.org 70 1parent 32c20d64995844daaaed9c9a11afc03ae68c7753 /scm/dedup/commit/32c20d64995844daaaed9c9a11afc03ae68c7753.gph bitreich.org 70 hAuthor: z3bra URL:mailto:contactatz3bradotorg bitreich.org 70 iDate: Sun, 17 Feb 2019 14:42:59 +0100 Err bitreich.org 70 i Err bitreich.org 70 iCheck buffer size in chunk_blk() Err bitreich.org 70 i Err bitreich.org 70 iIt also changes the for loop so we can chunk a block if the pattern Err bitreich.org 70 imatches right at the beginning of the block, thus making the smallest Err bitreich.org 70 ichunk size WINSIZ instead of WINSIZ + 1. Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M dedup.c | 14 ++++++++------ Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 8 insertions(+), 6 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@@ -140,6 +140,10 @@ chunk_blk(uint8_t *buf, size_t size) Err bitreich.org 70 i size_t i; Err bitreich.org 70 i uint32_t fp; Err bitreich.org 70 i Err bitreich.org 70 i+ /* buzhash should be at least WINSIZ */ Err bitreich.org 70 i+ if (size < WINSIZ) Err bitreich.org 70 i+ return size; Err bitreich.org 70 i+ Err bitreich.org 70 i /* Err bitreich.org 70 i * To achieve better deduplication, we chunk blocks based on a Err bitreich.org 70 i * recurring pattern occuring on the data stream. A fixed window Err bitreich.org 70 i@@ -150,8 +154,9 @@ chunk_blk(uint8_t *buf, size_t size) Err bitreich.org 70 i * WINSIZ the smallest possible block size. Err bitreich.org 70 i */ Err bitreich.org 70 i fp = buzh_init(buf, WINSIZ); Err bitreich.org 70 i- for (i = 1; i < size - WINSIZ; i++) { Err bitreich.org 70 i- fp = buzh_update(fp, buf[i - 1], buf[i + WINSIZ - 1], WINSIZ); Err bitreich.org 70 i+ for (i = 0; i < size - WINSIZ; i++) { Err bitreich.org 70 i+ if (i > 0) Err bitreich.org 70 i+ fp = buzh_update(fp, buf[i - 1], buf[WINSIZ + i - 1], WINSIZ); Err bitreich.org 70 i if ((fp & HASHMSK) == 0) Err bitreich.org 70 i return i + WINSIZ; Err bitreich.org 70 i } Err bitreich.org 70 i@@ -387,10 +392,7 @@ dedup(int fd, char *msg) Err bitreich.org 70 i struct bdescr bdescr; Err bitreich.org 70 i size_t blksiz; Err bitreich.org 70 i Err bitreich.org 70 i- if (n > WINSIZ) Err bitreich.org 70 i- blksiz = chunk_blk(bp, n); Err bitreich.org 70 i- else Err bitreich.org 70 i- blksiz = n; Err bitreich.org 70 i+ blksiz = chunk_blk(bp, n); 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 .