Re: fsetxattr(2) for ACL on nfs

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

 



On May 25, 2017, at 4:37 PM, J. R. Okajima <hooanon05g@xxxxxxxxx> wrote:
> 
> Since v4.12-rc1, I see an error on NFS3.
> 
> $ stat -f .
>  File: "."
>    ID: 0        Namelen: 255     Type: nfs
> Block size: 32768      Fundamental block size: 32768
> Blocks: Total: 248        Free: 247        Available: 234
> Inodes: Total: 2048       Free: 2020
> $ cp ../ro/f_src .
> $ rm f_src
> rm: remove regular file 'f_src'? y
> $ cp -p ../ro/f_src .
> cp: preserving permissions for './f_src': Permission denied
> 
> (from "cp --help")
>  -p                           same as --preserve=mode,ownership,timestamps
>      --preserve[=ATTR_LIST]   preserve the specified attributes (default:
>                                 mode,ownership,timestamps), if possible
>                                 additional attributes: context, links, xattr,
>                                 all
> 
> By strace, I see fsetxattr(2) for ACL returned the error.
> Is this an intentional behaviour?
> 
> (from strace)
> open("../ro/f_src", O_RDONLY)           = 3
> fstat(3, {st_mode=S_IFREG|0644, st_size=2, ...}) = 0
> open("./f_src", O_WRONLY|O_CREAT|O_EXCL, 0600) = 4
> fstat(4, {st_mode=S_IFREG|0600, st_size=0, ...}) = 0
> fadvise64(3, 0, 0, POSIX_FADV_SEQUENTIAL) = 0
> mmap(NULL, 139264, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fcb293f8000
> read(3, "f\n", 131072)                  = 2
> write(4, "f\n", 2)                      = 2
> read(3, "", 131072)                     = 0
> utimensat(4, NULL, {{1495750885, 0}, {1495750885, 0}}, 0) = 0
> fgetxattr(3, "system.posix_acl_access", 0x7ffed40196d0, 132) = -1 ENODATA (No data available)
> fstat(3, {st_mode=S_IFREG|0644, st_size=2, ...}) = 0
> 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 EACCES (Permission denied)

To me this looks like "cp" is broken.  If it gets no POSIX ACL xattr from the
kernel (ENODATA) for this file, why is it trying to save a POSIX ACL to the
copy?  That just adds needless overhead, either at the syscall level, or also
on disk if it is storing ACLs on files that don't need them...

Cheers, Andreas

> fchmod(4, 0100644)                      = 0
> open("/usr/lib/charset.alias", O_RDONLY|O_NOFOLLOW) = -1 ENOENT (No such file or directory)
> write(2, "cp: ", 4)                     = 4
> write(2, "preserving permissions for './f_"..., 36) = 36
> write(2, ": Permission denied", 19)     = 19
> write(2, "\n", 1)                       = 1
> 
> Additonally, after this error, the shutdown process stops saying
> 	nfs: server localhost not responding, still trying
> 
> Does anyone know which commit causes these problems?
> 
> 
> J. R. Okajima


Cheers, Andreas





Attachment: signature.asc
Description: Message signed with OpenPGP


[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux