changeset 27403:c46a59853fb5

* lib/utimens.c (futimens) [HAVE_BUGGY_NFS_TIME_STAMPS]: Add a workaround for this case. It is not autoconfigured now; offhand it's hard to see how to autoconfigure it.
author Paul Eggert <eggert@cs.ucla.edu>
date Tue, 05 Dec 2006 18:09:17 +0000
parents 929259685713
children 5a4ff089a7d4
files ChangeLog lib/utimens.c
diffstat 2 files changed, 23 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Mon Dec 04 07:23:36 2006 +0000
+++ b/ChangeLog	Tue Dec 05 18:09:17 2006 +0000
@@ -1,3 +1,9 @@
+2006-12-05  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* lib/utimens.c (futimens) [HAVE_BUGGY_NFS_TIME_STAMPS]: Add a
+	workaround for this case.  It is not autoconfigured now; offhand
+	it's hard to see how to autoconfigure it.
+
 2006-12-03  Paul Eggert  <eggert@cs.ucla.edu>
 
 	* lib/mkdir-p.c (make_dir_parents): Fix race condition when making
--- a/lib/utimens.c	Mon Dec 04 07:23:36 2006 +0000
+++ b/lib/utimens.c	Tue Dec 05 18:09:17 2006 +0000
@@ -76,6 +76,23 @@
 futimens (int fd ATTRIBUTE_UNUSED,
 	  char const *file, struct timespec const timespec[2])
 {
+  /* Some Linux-based NFS clients are buggy, and mishandle time stamps
+     of files in NFS file systems in some cases.  We have no
+     configure-time test for this, but please see
+     <http://bugs.gentoo.org/show_bug.cgi?id=132673> for references to
+     some of the problems with Linux 2.6.16.  If this affects you,
+     compile with -DHAVE_BUGGY_NFS_TIME_STAMPS; this is reported to
+     help in some cases, albeit at a cost in performance.  But you
+     really should upgrade your kernel to a fixed version, since the
+     problem affects many applications.  */
+
+#if HAVE_BUGGY_NFS_TIME_STAMPS
+  if (0 <= fd)
+    fsync (fd);
+  else
+    sync ();
+#endif
+
   /* There's currently no interface to set file timestamps with
      nanosecond resolution, so do the best we can, discarding any
      fractional part of the timestamp.  */