From: Wayne Davison Date: Mon, 25 May 2020 21:01:52 +0000 (-0700) Subject: Two sparse fixes from Yuxuan Shui. X-Git-Tag: v3.2.0pre1~102 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=888ce058d8bf82acdf33d5d94419533332ff04fd;p=thirdparty%2Frsync.git 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. --- 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