mirror of
https://github.com/RsyncProject/rsync.git
synced 2026-05-11 08:24:14 -04:00
Fix --open-noatime option not working on files
atime of source files could sometimes be overwritten even though --open-noatime option was used. To fix that, optional O_NOATIME flag was added to do_open_nofollow which is also used to open regular files since fix: "fixed symlink race condition in sender" Previously optional O_NOATIME flag was only in do_open.
This commit is contained in:
committed by
Andrew Tridgell
parent
1c5ebdc4e5
commit
992e10efaf
@@ -683,6 +683,11 @@ int do_open_nofollow(const char *pathname, int flags)
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef O_NOATIME
|
||||
if (open_noatime)
|
||||
flags |= O_NOATIME;
|
||||
#endif
|
||||
|
||||
#ifdef O_NOFOLLOW
|
||||
fd = open(pathname, flags|O_NOFOLLOW);
|
||||
#else
|
||||
|
||||
26
testsuite/open-noatime.test
Normal file
26
testsuite/open-noatime.test
Normal file
@@ -0,0 +1,26 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Test rsync --open-noatime option keeps source atimes intact
|
||||
|
||||
. "$suitedir/rsync.fns"
|
||||
|
||||
$RSYNC -VV | grep '"atimes": true' >/dev/null || test_skipped "Rsync is configured without atimes support"
|
||||
|
||||
mkdir "$fromdir"
|
||||
|
||||
# --open-noatime did not work properly on files with size > 0
|
||||
echo content > "$fromdir/foo"
|
||||
touch -a -t 200102031717.42 "$fromdir/foo"
|
||||
|
||||
TLS_ARGS=--atimes
|
||||
|
||||
"$TOOLDIR/tls" $TLS_ARGS "$fromdir/foo" > "$tmpdir/atime-from-before"
|
||||
|
||||
# Do not use checkit because it uses "diff" which breaks atimes
|
||||
$RSYNC --open-noatime --archive --recursive --times --atimes -vvv "$fromdir/" "$todir/"
|
||||
|
||||
"$TOOLDIR/tls" $TLS_ARGS "$fromdir/foo" > "$tmpdir/atime-from-after"
|
||||
diff "$tmpdir/atime-from-before" "$tmpdir/atime-from-after"
|
||||
|
||||
# The script would have aborted on error, so getting here means we've won.
|
||||
exit 0
|
||||
Reference in New Issue
Block a user