On s390x the copy package fails if run inside a container because it fails to detect the existence of copy_file_range properly.
If ran on host
|
n, err := unix.CopyFileRange(srcFd, nil, dstFd, nil, int(size), 0) |
fails with ENOSYS and fallback method will be used.
But if the same code is run under limited capabilities it produces EPERM instead(even though it doesn't seem to be allowed error for this syscall) and the copy fails.
--- FAIL: TestCopyDirectory (0.00s)
copy_test.go:47: Copy test failed: operation not permitted
copy file range failed
github.com/containerd/continuity/fs.copyFileContent
/root/go/src/github.com/containerd/continuity/fs/copy_linux.go:79
github.com/containerd/continuity/fs.CopyFile
/root/go/src/github.com/containerd/continuity/fs/copy.go:137
github.com/containerd/continuity/fs.copyDirectory
/root/go/src/github.com/containerd/continuity/fs/copy.go:92
github.com/containerd/continuity/fs.copyDirectory
/root/go/src/github.com/containerd/continuity/fs/copy.go:79
github.com/containerd/continuity/fs.CopyDir
/root/go/src/github.com/containerd/continuity/fs/copy.go:40
github.com/containerd/continuity/fs.testCopy
/root/go/src/github.com/containerd/continuity/fs/copy_test.go:97
github.com/containerd/continuity/fs.TestCopyDirectory
/root/go/src/github.com/containerd/continuity/fs/copy_test.go:46
testing.tRunner
/usr/local/go/src/testing/testing.go:827
runtime.goexit
/usr/local/go/src/runtime/asm_s390x.s:782
failed to copy files
github.com/containerd/continuity/fs.copyDirectory
/root/go/src/github.com/containerd/continuity/fs/copy.go:93
github.com/containerd/continuity/fs.copyDirectory
/root/go/src/github.com/containerd/continuity/fs/copy.go:79
github.com/containerd/continuity/fs.CopyDir
/root/go/src/github.com/containerd/continuity/fs/copy.go:40
github.com/containerd/continuity/fs.testCopy
/root/go/src/github.com/containerd/continuity/fs/copy_test.go:97
github.com/containerd/continuity/fs.TestCopyDirectory
/root/go/src/github.com/containerd/continuity/fs/copy_test.go:46
testing.tRunner
/usr/local/go/src/testing/testing.go:827
runtime.goexit
/usr/local/go/src/runtime/asm_s390x.s:782
failed to copy
github.com/containerd/continuity/fs.testCopy
/root/go/src/github.com/containerd/continuity/fs/copy_test.go:98
github.com/containerd/continuity/fs.TestCopyDirectory
/root/go/src/github.com/containerd/continuity/fs/copy_test.go:46
testing.tRunner
/usr/local/go/src/testing/testing.go:827
runtime.goexit
/usr/local/go/src/runtime/asm_s390x.s:782
FAIL
root@s390x-ubuntu-17:/home/ubuntu# uname -a
Linux s390x-ubuntu-17 4.4.0-130-generic #156-Ubuntu SMP Thu Jun 14 09:18:59 UTC 2018 s390x s390x s390x GNU/Linux
@estesp
On
s390xthe copy package fails if run inside a container because it fails to detect the existence ofcopy_file_rangeproperly.If ran on host
continuity/fs/copy_linux.go
Line 74 in 7f53d41
But if the same code is run under limited capabilities it produces
EPERMinstead(even though it doesn't seem to be allowed error for this syscall) and the copy fails.@estesp