bug-gzip
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: gzip 1.3.6 (and other recent releases): utime() operation missed or


From: Paul Eggert
Subject: Re: gzip 1.3.6 (and other recent releases): utime() operation missed or clobbered at output file close
Date: Tue, 05 Dec 2006 10:15:26 -0800
User-agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/21.4 (gnu/linux)

Ronan MELENNEC <address@hidden> writes:

> --- gzip-1.3.6/lib/utimens.c.orig     2006-09-14 00:38:14.000000000 +0200
> +++ gzip-1.3.6/lib/utimens.c  2006-12-05 10:25:35.000000000 +0100
> @@ -93,6 +93,12 @@
>    else
>      t = NULL;
>  
> +  /*
> +   * TO BE REVIEWED (usefulness and portability)
> +   */
> +  if (fd >= 0)
> +    /* helps work around NFS buffering issues */
> +      fsync (fd); 
>  
>    if (fd < 0)
>      {

Yes, this should work.  But it hurts performance on all hosts, simply
to avoid a problem on a few buggy hosts.

I installed the following change instead, into gnulib.  You should be
able to use it by configuring with 'configure CFLAGS='-g -O2
-DHAVE_BUGGY_NFS_TIME_STAMPS', or something like that.  I can't see an
easy way to autoconfigure it, since an executable might be built on
(say) a non-buggy Linux 2.4 host and then executed on a buggy Linux
2.6.19 host.

2006-12-05  Paul Eggert  <address@hidden>

        * 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.

--- lib/utimens.c       13 Sep 2006 22:38:14 -0000      1.11
+++ lib/utimens.c       5 Dec 2006 18:13:50 -0000       1.13
@@ -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 (fd < 0)
+    sync ();
+  else
+    fsync (fd);
+#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.  */




reply via email to

[Prev in Thread] Current Thread [Next in Thread]