iAdd block compat interface - 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 dd4146c8d47e62b50f3806ee6e16588bf0d83e02 /scm/dedup/commit/dd4146c8d47e62b50f3806ee6e16588bf0d83e02.gph bitreich.org 70 1parent 42901e4da4f38681c9cb7defdcce92d5f63b38a6 /scm/dedup/commit/42901e4da4f38681c9cb7defdcce92d5f63b38a6.gph bitreich.org 70 hAuthor: sin URL:mailto:sin@2f30.org bitreich.org 70 iDate: Fri, 26 Apr 2019 10:44:04 +0100 Err bitreich.org 70 i Err bitreich.org 70 iAdd block compat interface Err bitreich.org 70 i Err bitreich.org 70 ifallocate(2) is not available on non-linux systems. Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M Makefile | 1 + Err bitreich.org 70 i A bcompat.c | 19 +++++++++++++++++++ Err bitreich.org 70 i M block.h | 3 +++ Err bitreich.org 70 i M bstorage.c | 5 +---- Err bitreich.org 70 i M config.mk | 2 +- Err bitreich.org 70 i Err bitreich.org 70 i5 files changed, 25 insertions(+), 5 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@@ -15,6 +15,7 @@ HDR = \ Err bitreich.org 70 i tree.h \ Err bitreich.org 70 i Err bitreich.org 70 i COMMOBJ = \ Err bitreich.org 70 i+ bcompat.o \ Err bitreich.org 70 i bcompress.o \ Err bitreich.org 70 i blake2b-ref.o \ Err bitreich.org 70 i block.o \ Err bitreich.org 70 1diff --git a/bcompat.c b/bcompat.c /scm/dedup/file/bcompat.c.gph bitreich.org 70 i@@ -0,0 +1,19 @@ Err bitreich.org 70 i+#ifdef __linux__ Err bitreich.org 70 i+#define _GNU_SOURCE Err bitreich.org 70 i+#include Err bitreich.org 70 i+ Err bitreich.org 70 i+int Err bitreich.org 70 i+punchhole(int fd, off_t offset, off_t len) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ int mode; Err bitreich.org 70 i+ Err bitreich.org 70 i+ mode = FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE; Err bitreich.org 70 i+ return fallocate(fd, mode, offset, len); Err bitreich.org 70 i+} Err bitreich.org 70 i+#else Err bitreich.org 70 i+int Err bitreich.org 70 i+punchhole(int fd, off_t offset, off_t len) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ return -1; Err bitreich.org 70 i+} Err bitreich.org 70 i+#endif Err bitreich.org 70 1diff --git a/block.h b/block.h /scm/dedup/file/block.h.gph bitreich.org 70 i@@ -34,6 +34,9 @@ extern int bsync(struct bctx *bctx); Err bitreich.org 70 i extern int bclose(struct bctx *bctx); Err bitreich.org 70 i struct bparam *bparamdef(void); Err bitreich.org 70 i Err bitreich.org 70 i+/* bcompat.c */ Err bitreich.org 70 i+extern int punchhole(int fd, off_t offset, off_t len); Err bitreich.org 70 i+ Err bitreich.org 70 i /* bcompress.c */ Err bitreich.org 70 i extern struct bops *bcompressops(void); Err bitreich.org 70 i Err bitreich.org 70 1diff --git a/bstorage.c b/bstorage.c /scm/dedup/file/bstorage.c.gph bitreich.org 70 i@@ -552,10 +552,7 @@ bsrm(struct bctx *bctx, unsigned char *md) Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i if (bd->refcnt == 0) { Err bitreich.org 70 i- int mode; Err bitreich.org 70 i- Err bitreich.org 70 i- mode = FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE; Err bitreich.org 70 i- if (fallocate(sctx->fd, mode, bd->offset, bd->size) < 0) { Err bitreich.org 70 i+ if (punchhole(sctx->fd, bd->offset, bd->size) < 0) { Err bitreich.org 70 i /* Err bitreich.org 70 i * Filesystem does not support hole punching. Err bitreich.org 70 i * Try to recover the block descriptor so we don't Err bitreich.org 70 1diff --git a/config.mk b/config.mk /scm/dedup/file/config.mk.gph bitreich.org 70 i@@ -2,5 +2,5 @@ VERSION = 1.0 Err bitreich.org 70 i PREFIX = /usr/local Err bitreich.org 70 i MANPREFIX = $(PREFIX)/man Err bitreich.org 70 i Err bitreich.org 70 i-CPPFLAGS = -I/usr/local/include -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE Err bitreich.org 70 i+CPPFLAGS = -I/usr/local/include -D_FILE_OFFSET_BITS=64 Err bitreich.org 70 i LDFLAGS = -L/usr/local/lib Err bitreich.org 70 .