* lib/utimens.c (futimens) [HAVE_BUGGY_NFS_TIME_STAMPS]: Add a
authorPaul Eggert <eggert@cs.ucla.edu>
Tue, 5 Dec 2006 18:09:17 +0000 (18:09 +0000)
committerPaul Eggert <eggert@cs.ucla.edu>
Tue, 5 Dec 2006 18:09:17 +0000 (18:09 +0000)
workaround for this case.  It is not autoconfigured now; offhand
it's hard to see how to autoconfigure it.

ChangeLog
lib/utimens.c

index b6d4c6b..90002e7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
index e3daaf3..e72b840 100644 (file)
@@ -76,6 +76,23 @@ int
 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.  */