]> Cypherpunks repositories - gostls13.git/commitdiff
[release-branch.go1.15] internal/poll: treat copy_file_range EPERM as not-handled
authorTobias Klauser <tklauser@distanz.ch>
Wed, 19 Aug 2020 14:54:36 +0000 (16:54 +0200)
committerDmitri Shuralyov <dmitshur@golang.org>
Sat, 22 Aug 2020 01:21:29 +0000 (01:21 +0000)
Updates #40893.
Fixes #40900.

Change-Id: I938ea4796c1e1d1e136117fe78b06ad6da8e40de
Reviewed-on: https://go-review.googlesource.com/c/go/+/249257
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Antonio Troina <thoeni@gmail.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
(cherry picked from commit b0cc02e8c2bdba5401838d9d70a859191af9bfa5)
Reviewed-on: https://go-review.googlesource.com/c/go/+/249897
Run-TryBot: Dmitri Shuralyov <dmitshur@golang.org>

src/internal/poll/copy_file_range_linux.go

index 7e6712581871bcdd0f127f6176f685194875e8a3..09de299ff71781f09e173acc72dc60705e2f1b37 100644 (file)
@@ -41,7 +41,7 @@ func CopyFileRange(dst, src *FD, remain int64) (written int64, handled bool, err
                        // use copy_file_range(2) again.
                        atomic.StoreInt32(&copyFileRangeSupported, 0)
                        return 0, false, nil
-               case syscall.EXDEV, syscall.EINVAL, syscall.EOPNOTSUPP:
+               case syscall.EXDEV, syscall.EINVAL, syscall.EOPNOTSUPP, syscall.EPERM:
                        // Prior to Linux 5.3, it was not possible to
                        // copy_file_range across file systems. Similarly to
                        // the ENOSYS case above, if we see EXDEV, we have
@@ -55,6 +55,11 @@ func CopyFileRange(dst, src *FD, remain int64) (written int64, handled bool, err
                        //
                        // If the file is on NFS, we can see EOPNOTSUPP.
                        // See issue #40731.
+                       //
+                       // If the process is running inside a Docker container,
+                       // we might see EPERM instead of ENOSYS. See issue
+                       // #40893. Since EPERM might also be a legitimate error,
+                       // don't mark copy_file_range(2) as unsupported.
                        return 0, false, nil
                case nil:
                        if n == 0 {