From: Ian Lance Taylor Date: Wed, 12 Aug 2020 19:09:35 +0000 (-0700) Subject: [release-branch.go1.15] internal/poll: treat copy_file_range EOPNOTSUPP as not-handled X-Git-Tag: go1.15.2~17 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=f2b710998902d6754d62810e1577c01313763342;p=gostls13.git [release-branch.go1.15] internal/poll: treat copy_file_range EOPNOTSUPP as not-handled For #40731 Fixes #40739 Change-Id: I3e29878d597318acf5edcc38497aa2624f72be35 Reviewed-on: https://go-review.googlesource.com/c/go/+/248258 Run-TryBot: Ian Lance Taylor TryBot-Result: Gobot Gobot Reviewed-by: Emmanuel Odeke Reviewed-by: Tobias Klauser (cherry picked from commit d3a411b6debccb665da3497e7fa597c9a5ff16f1) Reviewed-on: https://go-review.googlesource.com/c/go/+/249197 Run-TryBot: Tobias Klauser --- diff --git a/src/internal/poll/copy_file_range_linux.go b/src/internal/poll/copy_file_range_linux.go index 604607f774..7e67125818 100644 --- a/src/internal/poll/copy_file_range_linux.go +++ b/src/internal/poll/copy_file_range_linux.go @@ -41,7 +41,7 @@ func CopyFileRange(dst, src *FD, remain int64) (written int64, handled bool, err // use copy_file_range(2) again. atomic.StoreInt32(©FileRangeSupported, 0) return 0, false, nil - case syscall.EXDEV, syscall.EINVAL: + case syscall.EXDEV, syscall.EINVAL, syscall.EOPNOTSUPP: // 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 @@ -52,6 +52,9 @@ func CopyFileRange(dst, src *FD, remain int64) (written int64, handled bool, err // dst or src refer to a pipe rather than a regular // file. This is another case where no data has been // transfered, so we consider it unhandled. + // + // If the file is on NFS, we can see EOPNOTSUPP. + // See issue #40731. return 0, false, nil case nil: if n == 0 {