From 888ce058d8bf82acdf33d5d94419533332ff04fd Mon Sep 17 00:00:00 2001 From: Wayne Davison Date: Mon, 25 May 2020 14:01:52 -0700 Subject: [PATCH] Two sparse fixes from Yuxuan Shui. - Make "len" parameter of do_punch_hole an OFF_T. - Clear sparse_past_write in sparse_end(), otherwise when write_sparse() is called for the next file, do_punch_hole() will be called with a pos that's not actually the current position in file, causing it to fail. --- fileio.c | 2 ++ syscall.c | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/fileio.c b/fileio.c index bd2e36ae..32dc62da 100644 --- a/fileio.c +++ b/fileio.c @@ -44,6 +44,8 @@ int sparse_end(int f, OFF_T size) { int ret; + sparse_past_write = 0; + if (!sparse_seek) return 0; diff --git a/syscall.c b/syscall.c index e1a02a3c..e8ce7d5c 100644 --- a/syscall.c +++ b/syscall.c @@ -523,7 +523,7 @@ OFF_T do_fallocate(int fd, OFF_T offset, OFF_T length) /* Punch a hole at pos for len bytes. The current file position must be at pos and will be * changed to be at pos + len. */ -int do_punch_hole(int fd, UNUSED(OFF_T pos), int len) +int do_punch_hole(int fd, UNUSED(OFF_T pos), OFF_T len) { #ifdef HAVE_FALLOCATE # ifdef HAVE_FALLOC_FL_PUNCH_HOLE -- 2.47.3