bug-coreutils
[Top][All Lists]
Advanced

[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




reply via email to

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