[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: moving timestamp preservation to the last step in copy_internal() /
From: |
Mike Frysinger |
Subject: |
Re: moving timestamp preservation to the last step in copy_internal() / copy_reg() |
Date: |
Wed, 10 May 2006 02:06:04 -0400 |
User-agent: |
KMail/1.9.1 |
On Wednesday 10 May 2006 01:28, Paul Eggert wrote:
> Mike Frysinger <address@hidden> writes:
> > so just ignore me, thanks :)
>
> OK, but, the original message at
> <http://bugs.gentoo.org/show_bug.cgi?id=132673> points out a real
> problem.
really not my day it seems ...
> However, the problem does not occur with me, so it most likely is a bug in
> his NFS implementation
which means it's a bug in the mainline kernel as well
> (perhaps the gentoo NFS client code?).
Gentoo no longer does custom patched sources ... our "gentoo kernel" consists
of vanilla sources + upstream security/critical fixes only ... and since both
the nfs server and client are part of mainline linux kernel, hard for us to
screw it up :)
as for our coreutils which we ship, it too includes mostly fixes taken from
upstream to address specific bugs
http://sources.gentoo.org/gentoo/src/patchsets/coreutils/
> Here's an example of cp -p working on Solaris 8 (sparc) with an
> NFS-mounted file:
here's unmodified coreutils/cvs running on unmodified linux kernel:
$ /bin/cp-cvs --version | head -n 1
cp (GNU coreutils) 6.0-cvs
$ uname -r
2.6.16.9
$ strace -o out /bin/cp-cvs -p /etc/passwd .
$ tail out
write(4, "root:x:0:0:root:/root:/bin/bash\n"..., 2966) = 2966
utimes("/proc/self/fd/4", {1147002858, 0}) = 0
fchown(4, 0, 0) = -1 EPERM (Operation not permitted)
fgetxattr(3, "system.posix_acl_access", 0x731b342540a0, 132) = -1 EOPNOTSUPP
(Operation not supported)
fsetxattr(4, "system.posix_acl_access",
"\x02\x00\x00\x00\x01\x00\x06\x00\xff\xff\xff\xff\x04\x00\x04\x00\xff\xff\xff\xff
\x00\x04\x00\xff\xff\xff\xff", 28, 0) = -1 EOPNOTSUPP (Operation not
supported)
fchmod(4, 0100644) = 0
close(4) = 0
close(3) = 0
close(1) = 0
exit_group(0) = ?
$ stat /etc/passwd passwd
File: `/etc/passwd'
Size: 2966 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 34732 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2006-05-07 07:54:18.000000000 -0400
Modify: 2006-05-07 07:54:18.000000000 -0400
Change: 2006-05-07 07:54:18.000000000 -0400
File: `passwd'
Size: 2966 Blocks: 8 IO Block: 16384 regular file
Device: eh/14d Inode: 584239 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ vapier) Gid: ( 100/ users)
Access: 2006-05-07 07:54:18.000000000 -0400
Modify: 2006-05-10 01:39:45.771739400 -0400
Change: 2006-05-10 01:39:45.773739096 -0400
shifting down the utimes() to after fchown() yields the correct results ...
going by the chown() spec:
http://www.opengroup.org/onlinepubs/009695399/functions/chown.html
only the ctime field should be updated, so we do appear to have a bug in the
linux/nfs implementation ...
-mike