fsetxattr(2) for ACL on nfs
Subsystems (3)
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) = 3fstat(3, {st_mode=S_IFREG|0644, st_size=2, ...}) = 0open("./f_src", O_WRONLY|O_CREAT|O_EXCL, 0600) = 4fstat(4, {st_mode=S_IFREG|0600, st_size=0, ...}) = 0fadvise64(3, 0, 0, POSIX_FADV_SEQUENTIAL) = 0mmap(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) = 0fgetxattr(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)fchmod(4, 0100644) = 0open("/usr/lib/charset.alias", O_RDONLY|O_NOFOLLOW) = -1 ENOENT (No such file or directory)write(2, "cp: ", 4) = 4write(2, "preserving permissions for './f_"..., 36) = 36write(2, ": Permission denied", 19) = 19write(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
Quoted 32 lines · J. R. Okajima
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, allBy strace, I see fsetxattr(2) for ACL returned the error. Is this an intentional behaviour?
(from strace)
open("../ro/f_src", O_RDONLY)= 3fstat(3, {st_mode=S_IFREG|0644, st_size=2, ...})= 0open("./f_src", O_WRONLY|O_CREAT|O_EXCL, 0600)= 4fstat(4, {st_mode=S_IFREG|0600, st_size=0, ...})= 0fadvise64(3, 0, 0, POSIX_FADV_SEQUENTIAL)= 0mmap(NULL, 139264, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)=0x7fcb293f8000
Quoted 7 lines
read(3, "f\n", 131072) = 2 write(4, "f\n", 2) = 2 read(3, "", 131072) = 0
utimensat(4, NULL, {{1495750885, 0}, {1495750885, 0}}, 0)= 0fgetxattr(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
Quoted 7 lines
fchmod(4, 0100644)= 0open("/usr/lib/charset.alias", O_RDONLY|O_NOFOLLOW)= -1 ENOENT (No such file or directory)write(2, "cp: ", 4)= 4write(2, "preserving permissions for './f_"..., 36)= 36write(2, ": Permission denied", 19)= 19write(2, "\n", 1)= 1
Quoted 7 lines
Additonally, after this error, the shutdown process stops saying
nfs: server localhost not responding, still tryingDoes anyone know which commit causes these problems?
J. R. Okajima
Cheers, Andreas
Andreas Dilger:
Quoted 14 lines
Quoted 6 lines
open("../ro/f_src", O_RDONLY)= 3fstat(3, {st_mode=S_IFREG|0644, st_size=2, ...})= 0open("./f_src", O_WRONLY|O_CREAT|O_EXCL, 0600)= 4fstat(4, {st_mode=S_IFREG|0600, st_size=0, ...})= 0fadvise64(3, 0, 0, POSIX_FADV_SEQUENTIAL)= 0mmap(NULL, 139264, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)=0x7fcb293f8000Quoted 7 lines
read(3, "f\n", 131072) = 2 write(4, "f\n", 2) = 2 read(3, "", 131072) = 0
utimensat(4, NULL, {{1495750885, 0}, {1495750885, 0}}, 0)= 0fgetxattr(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)
Quoted 4 lines
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...
Maybe you are right.
But on v4.11, it succeeded.
open("../ro/f_src", O_RDONLY) = 3fstat(3, {st_mode=S_IFREG|0644, st_size=2, ...}) = 0open("./f_src", O_WRONLY|O_CREAT|O_EXCL, 0600) = 4fstat(4, {st_mode=S_IFREG|0600, st_size=0, ...}) = 0fadvise64(3, 0, 0, POSIX_FADV_SEQUENTIAL) = 0mmap(NULL, 139264, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f3dcf031000
read(3, "f\n", 131072) = 2 write(4, "f\n", 2) = 2 read(3, "", 131072) = 0
utimensat(4, NULL, {{1495842847, 0}, {1495842847, 0}}, 0) = 0fgetxattr(3, "system.posix_acl_access", 0x7fff63443360, 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) = 0
J. R. Okajima
It's a known bug, I've been slow to get it upstream, apologies, I'll try to get it in for -rc4.
--b.
Quoted 43 lines · J. R. Okajima
Andreas Dilger:
Quoted 14 lines
Quoted 6 lines
open("../ro/f_src", O_RDONLY)= 3fstat(3, {st_mode=S_IFREG|0644, st_size=2, ...})= 0open("./f_src", O_WRONLY|O_CREAT|O_EXCL, 0600)= 4fstat(4, {st_mode=S_IFREG|0600, st_size=0, ...})= 0fadvise64(3, 0, 0, POSIX_FADV_SEQUENTIAL)= 0mmap(NULL, 139264, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)=0x7fcb293f8000Quoted 7 lines
read(3, "f\n", 131072) = 2 write(4, "f\n", 2) = 2 read(3, "", 131072) = 0
utimensat(4, NULL, {{1495750885, 0}, {1495750885, 0}}, 0)= 0fgetxattr(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)Quoted 4 lines
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...
Maybe you are right.
But on v4.11, it succeeded.
open("../ro/f_src", O_RDONLY)= 3fstat(3, {st_mode=S_IFREG|0644, st_size=2, ...})= 0open("./f_src", O_WRONLY|O_CREAT|O_EXCL, 0600)= 4fstat(4, {st_mode=S_IFREG|0600, st_size=0, ...})= 0fadvise64(3, 0, 0, POSIX_FADV_SEQUENTIAL)= 0mmap(NULL, 139264, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)=0x7f3dcf031000read(3, "f\n", 131072) = 2 write(4, "f\n", 2) = 2 read(3, "", 131072) = 0
utimensat(4, NULL, {{1495842847, 0}, {1495842847, 0}}, 0)= 0fgetxattr(3, "system.posix_acl_access", 0x7fff63443360, 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) = 0J. R. Okajima
--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html