From bd17b8d90b85008194c1830e635353bc8ca196a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A1draig=20Brady?= Date: Fri, 30 Dec 2022 19:34:27 +0000 Subject: [PATCH] copy: attempt copy offload with sparse files * src/copy.c (lseek_copy): Also set hole_size to 0, i.e. enable copy_file_range(), with --sparse=auto (the default), to enable copy offload in this case, as we've strong signal from SEEK_DATA that we're operating on actual data and not holes here. Addresses https://bugs.gnu.org/60416 --- src/copy.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/copy.c b/src/copy.c index e465271ef..7407517f1 100644 --- a/src/copy.c +++ b/src/copy.c @@ -526,12 +526,12 @@ lseek_copy (int src_fd, int dest_fd, char **abuf, size_t buf_size, last_ext_len = ext_len; /* Copy this extent, looking for further opportunities to not - bother to write zeros unless --sparse=never, since SEEK_HOLE + bother to write zeros if --sparse=always, since SEEK_HOLE is conservative and may miss some holes. */ off_t n_read; bool read_hole; if ( ! sparse_copy (src_fd, dest_fd, abuf, buf_size, - sparse_mode == SPARSE_NEVER ? 0 : hole_size, + sparse_mode != SPARSE_ALWAYS ? 0 : hole_size, true, allow_reflink, src_name, dst_name, ext_len, &n_read, &read_hole)) return false; -- 2.26.2