[Top][All Lists]
[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. */
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: gzip 1.3.6 (and other recent releases): utime() operation missed or clobbered at output file close,
Paul Eggert <=