The branch, master has been updated via 3911c238 Tweak SIMD & ASM option defaults. via 3814dbb0 Make cygwin's curl grab the gist file. [buildall] via 82f023d7 Add --fsync option (promoted from patches). via ec57c57b Help avoid a --sparse --inplace bug in older rsyncs. via 354fa581 Fix typo. via d881814a Don't allow a broken samba host to cause gensend to fail. via ad048d78 Allow $host_cpu to be amd64 in addition to x86_64. via 109dbc0b Rename cmdormsg -> cmd-or-msg. from 745ecf28 Fix a couple variable typos.
https://git.samba.org/?p=rsync.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 3911c2386623e1fbd7e985f641c1cee6ac21e067 Author: Wayne Davison <wa...@opencoder.net> Date: Mon Sep 27 11:09:43 2021 -0700 Tweak SIMD & ASM option defaults. commit 3814dbb0f4f6242af67ed750cb6e556b973afc1c Author: Wayne Davison <wa...@opencoder.net> Date: Mon Sep 27 10:33:00 2021 -0700 Make cygwin's curl grab the gist file. [buildall] commit 82f023d7e3cca126d264ebb81b19feaf8731ad9a Author: Wayne Davison <wa...@opencoder.net> Date: Mon Sep 27 10:30:00 2021 -0700 Add --fsync option (promoted from patches). commit ec57c57baf848718bbab93fa0c597d15718acc5a Author: Wayne Davison <wa...@opencoder.net> Date: Mon Sep 27 10:16:15 2021 -0700 Help avoid a --sparse --inplace bug in older rsyncs. commit 354fa581c16e7a32ae4cb7dc8266f224ab985f14 Author: Wayne Davison <wa...@opencoder.net> Date: Sun Sep 26 19:27:46 2021 -0700 Fix typo. commit d881814a3561b96da73fa8ce5b88fb7a3a215332 Author: Wayne Davison <wa...@opencoder.net> Date: Sun Sep 26 19:11:24 2021 -0700 Don't allow a broken samba host to cause gensend to fail. commit ad048d78aced57c7ac4434a67646edf56878b6fe Author: Wayne Davison <wa...@opencoder.net> Date: Sun Sep 26 19:11:20 2021 -0700 Allow $host_cpu to be amd64 in addition to x86_64. commit 109dbc0b7535e8f8094802182f9067bfdc88dfc9 Author: Wayne Davison <wa...@opencoder.net> Date: Sun Sep 26 18:55:46 2021 -0700 Rename cmdormsg -> cmd-or-msg. ----------------------------------------------------------------------- Summary of changes: .github/workflows/build.yml | 2 +- Makefile.in | 8 ++++---- cmdormsg => cmd-or-msg | 0 configure.ac | 14 +++++++------- options.c | 11 ++++++++++- receiver.c | 6 ++++++ rsync.1.md | 9 ++++++++- t_stub.c | 1 + util1.c | 12 ++++++++++-- 9 files changed, 47 insertions(+), 16 deletions(-) rename cmdormsg => cmd-or-msg (100%) Changeset truncated at 500 lines: diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 530ec19d..1647fd2a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -92,7 +92,7 @@ jobs: - name: prep run: | cyg-get make autoconf automake gcc-core attr libattr-devel python38 python38-pip libzstd-devel liblz4-devel libssl-devel libxxhash0 libxxhash-devel - curl.exe -o git-version.h https://download.samba.org/pub/rsync/generated-files/git-version.h + curl.exe -o git-version.h https://gist.githubusercontent.com/WayneD/c11243fa374fc64d4e42f2855c8e3827/raw/rsync-git-version.h echo "C:/tools/cygwin/bin" >>$Env:GITHUB_PATH - name: commonmark run: bash -c 'python3 -mpip install --user commonmark' diff --git a/Makefile.in b/Makefile.in index 42bc383b..0b5973b1 100644 --- a/Makefile.in +++ b/Makefile.in @@ -138,13 +138,13 @@ git-version.h: mkgitver $(wildcard $(srcdir)/.git/logs/HEAD) $(srcdir)/mkgitver simd-checksum-x86_64.o: simd-checksum-x86_64.cpp - @$(srcdir)/cmdormsg disable-simd $(CXX) -I. $(CXXFLAGS) $(CPPFLAGS) -c -o $@ $(srcdir)/simd-checksum-x86_64.cpp + @$(srcdir)/cmd-or-msg disable-simd $(CXX) -I. $(CXXFLAGS) $(CPPFLAGS) -c -o $@ $(srcdir)/simd-checksum-x86_64.cpp simd-checksum-avx2.o: simd-checksum-avx2.S - @$(srcdir)/cmdormsg disable-asm $(CC) $(CFLAGS) --include=$(srcdir)/rsync.h -DAVX2_ASM -I. @NOEXECSTACK@ -c -o $@ $(srcdir)/simd-checksum-avx2.S + @$(srcdir)/cmd-or-msg disable-asm $(CC) $(CFLAGS) --include=$(srcdir)/rsync.h -DAVX2_ASM -I. @NOEXECSTACK@ -c -o $@ $(srcdir)/simd-checksum-avx2.S lib/md5-asm-x86_64.o: lib/md5-asm-x86_64.S config.h lib/md-defines.h - @$(srcdir)/cmdormsg disable-asm $(CC) -I. @NOEXECSTACK@ -c -o $@ $(srcdir)/lib/md5-asm-x86_64.S + @$(srcdir)/cmd-or-msg disable-asm $(CC) -I. @NOEXECSTACK@ -c -o $@ $(srcdir)/lib/md5-asm-x86_64.S tls$(EXEEXT): $(TLS_OBJ) $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(TLS_OBJ) $(LIBS) @@ -178,7 +178,7 @@ gensend: gen ./rsync -ai git-version.h $(srcdir)/gists/rsync-git-version.h && \ (cd $(srcdir)/gists && git commit --allow-empty-message -m '' rsync-git-version.h && git push) ; \ fi - rsync -aic $(GENFILES) git-version.h $${SAMBA_HOST-samba.org}:/home/ftp/pub/rsync/generated-files/ + rsync -aic $(GENFILES) git-version.h $${SAMBA_HOST-samba.org}:/home/ftp/pub/rsync/generated-files/ || true aclocal.m4: $(srcdir)/m4/*.m4 aclocal -I $(srcdir)/m4 diff --git a/cmdormsg b/cmd-or-msg similarity index 100% rename from cmdormsg rename to cmd-or-msg diff --git a/configure.ac b/configure.ac index 74640716..d80194ee 100644 --- a/configure.ac +++ b/configure.ac @@ -255,14 +255,14 @@ __attribute__ ((target("ssse3"))) void more_testing(char* buf, int len) if test x"$enable_simd" = x""; then case "$host_os" in - *linux*) enable_simd=yes ;; + *linux*) ;; *) enable_simd=no ;; esac fi if test x"$enable_simd" != x"no"; then # For x86-64 SIMD, g++ >=5 or clang++ >=7 is required - if test x"$host_cpu" = x"x86_64"; then + if test x"$host_cpu" = x"x86_64" -o x"$host_cpu" = x"amd64"; then AC_LANG(C++) if test x"$host_cpu" = x"$build_cpu"; then AC_RUN_IFELSE([AC_LANG_PROGRAM([SIMD_X86_64_TEST],[[if (test_ssse3(42) != 42 || test_sse2(42) != 42 || test_avx2(42) != 42) exit(1);]])], @@ -273,7 +273,7 @@ if test x"$enable_simd" != x"no"; then AC_LANG(C) if test x"$CXX_OK" = x"yes"; then # AC_MSG_RESULT() is called below. - SIMD="x86_64" + SIMD="$host_cpu" elif test x"$enable_simd" = x"yes"; then AC_MSG_RESULT(error) AC_MSG_ERROR(The SIMD compilation test failed. @@ -281,7 +281,7 @@ Omit --enable-simd to continue without it.) fi elif test x"$enable_simd" = x"yes"; then AC_MSG_RESULT(unavailable) - AC_MSG_ERROR(The SIMD optimizations are currently x86_64 only. + AC_MSG_ERROR(The SIMD optimizations are currently x86_64|amd64 only. Omit --enable-simd to continue without it.) fi fi @@ -320,17 +320,17 @@ AC_ARG_ENABLE(asm, if test x"$enable_asm" = x""; then case "$host_os" in - *linux*) enable_asm=yes ;; + *linux*) ;; *) enable_asm=no ;; esac fi if test x"$enable_asm" != x"no"; then - if test x"$host_cpu" = x"x86_64"; then + if test x"$host_cpu" = x"x86_64" -o x"$host_cpu" = x"amd64"; then ASM="$host_cpu" elif test x"$enable_asm" = x"yes"; then AC_MSG_RESULT(unavailable) - AC_MSG_ERROR(The ASM optimizations are currently x86_64 only. + AC_MSG_ERROR(The ASM optimizations are currently x86_64|amd64 only. Omit --enable-asm to continue without it.) fi fi diff --git a/options.c b/options.c index 9ffc3cf7..98676d17 100644 --- a/options.c +++ b/options.c @@ -66,6 +66,7 @@ int open_noatime = 0; int cvs_exclude = 0; int dry_run = 0; int do_xfers = 1; +int do_fsync = 0; int ignore_times = 0; int delete_mode = 0; int delete_during = 0; @@ -789,6 +790,7 @@ static struct poptOption long_options[] = { {"no-timeout", 0, POPT_ARG_VAL, &io_timeout, 0, 0, 0 }, {"contimeout", 0, POPT_ARG_INT, &connect_timeout, 0, 0, 0 }, {"no-contimeout", 0, POPT_ARG_VAL, &connect_timeout, 0, 0, 0 }, + {"fsync", 0, POPT_ARG_NONE, &do_fsync, 0, 0, 0 }, {"stop-after", 0, POPT_ARG_STRING, 0, OPT_STOP_AFTER, 0, 0 }, {"time-limit", 0, POPT_ARG_STRING, 0, OPT_STOP_AFTER, 0, 0 }, /* earlier stop-after name */ {"stop-at", 0, POPT_ARG_STRING, 0, OPT_STOP_AT, 0, 0 }, @@ -2806,6 +2808,9 @@ void server_options(char **args, int *argc_p) args[ac++] = tmpdir; } + if (do_fsync) + args[ac++] = "--fsync"; + if (basis_dir[0]) { /* the server only needs this option if it is not the sender, * and it may be an older version that doesn't know this @@ -2828,8 +2833,12 @@ void server_options(char **args, int *argc_p) if (append_mode > 1) args[ac++] = "--append"; args[ac++] = "--append"; - } else if (inplace) + } else if (inplace) { args[ac++] = "--inplace"; + /* Work around a bug in older rsync versions (on the remote side) for --inplace --sparse */ + if (sparse_files && !whole_file) + args[ac++] = "--no-W"; + } if (files_from && (!am_sender || filesfrom_host)) { if (filesfrom_host) { diff --git a/receiver.c b/receiver.c index b5020d07..091fcd6f 100644 --- a/receiver.c +++ b/receiver.c @@ -41,6 +41,7 @@ extern int preserve_hard_links; extern int preserve_perms; extern int write_devices; extern int preserve_xattrs; +extern int do_fsync; extern int basis_dir_cnt; extern int make_backups; extern int cleanup_got_literal; @@ -394,6 +395,11 @@ static int receive_data(int f_in, char *fname_r, int fd_r, OFF_T size_r, sum_len = sum_end(file_sum1); + if (do_fsync && fd != -1 && fsync(fd) != 0) { + rsyserr(FERROR, errno, "fsync failed on %s", full_fname(fname)); + exit_cleanup(RERR_FILEIO); + } + if (mapbuf) unmap_file(mapbuf); diff --git a/rsync.1.md b/rsync.1.md index 24457b2b..9bfda865 100644 --- a/rsync.1.md +++ b/rsync.1.md @@ -461,6 +461,7 @@ detailed description below for a complete description. --bwlimit=RATE limit socket I/O bandwidth --stop-after=MINS Stop rsync after MINS minutes have elapsed --stop-at=y-m-dTh:m Stop rsync at the specified point in time +--fsync fsync every written file --write-batch=FILE write a batched update to FILE --only-write-batch=FILE like --write-batch but w/o updating dest --read-batch=FILE read a batched update from FILE @@ -2314,7 +2315,7 @@ your home directory (remove the '=' for that). > rsync -av --link-dest=$PWD/prior_dir host:src_dir/ new_dir/ - If file's aren't linking, double-check their attributes. Also check if + If files aren't linking, double-check their attributes. Also check if some attributes are getting forced outside of rsync's control, such a mount option that squishes root to a single user, or mounts a removable drive with generic ownership (such as OS X's "Ignore ownership on this volume" @@ -3257,6 +3258,12 @@ your home directory (remove the '=' for that). mind that the remote host may have a different default timezone than your local host. +0. `--fsync` + + Cause the receiving side to fsync each finished file. This may slow down + the transfer, but can help to provide peace of mind when updating critical + files. + 0. `--write-batch=FILE` Record a file that can later be applied to another identical destination diff --git a/t_stub.c b/t_stub.c index 1e1e4046..ea2013d3 100644 --- a/t_stub.c +++ b/t_stub.c @@ -21,6 +21,7 @@ #include "rsync.h" +int do_fsync = 0; int inplace = 0; int modify_window = 0; int preallocate_files = 0; diff --git a/util1.c b/util1.c index ef78a82d..1cff973f 100644 --- a/util1.c +++ b/util1.c @@ -27,6 +27,7 @@ extern int dry_run; extern int module_id; +extern int do_fsync; extern int protect_args; extern int modify_window; extern int relative_paths; @@ -417,10 +418,17 @@ int copy_file(const char *source, const char *dest, int ofd, mode_t mode) #endif } + if (do_fsync && fsync(ofd) < 0) { + int save_errno = errno; + rsyserr(FERROR, errno, "fsync failed on %s", full_fname(dest)); + close(ofd); + errno = save_errno; + return -1; + } + if (close(ofd) < 0) { int save_errno = errno; - rsyserr(FERROR_XFER, errno, "close failed on %s", - full_fname(dest)); + rsyserr(FERROR_XFER, errno, "close failed on %s", full_fname(dest)); errno = save_errno; return -1; } -- The rsync repository. _______________________________________________ rsync-cvs mailing list rsync-cvs@lists.samba.org https://lists.samba.org/mailman/listinfo/rsync-cvs