]> Cypherpunks repositories - gostls13.git/commitdiff
[release-branch.go1.15] internal/poll: treat copy_file_range EOPNOTSUPP as not-handled
authorIan Lance Taylor <iant@golang.org>
Wed, 12 Aug 2020 19:09:35 +0000 (12:09 -0700)
committerDmitri Shuralyov <dmitshur@golang.org>
Fri, 21 Aug 2020 23:20:23 +0000 (23:20 +0000)
For #40731
Fixes #40739

Change-Id: I3e29878d597318acf5edcc38497aa2624f72be35
Reviewed-on: https://go-review.googlesource.com/c/go/+/248258
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Emmanuel Odeke <emm.odeke@gmail.com>
Reviewed-by: Tobias Klauser <tobias.klauser@gmail.com>
(cherry picked from commit d3a411b6debccb665da3497e7fa597c9a5ff16f1)
Reviewed-on: https://go-review.googlesource.com/c/go/+/249197
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>

src/internal/poll/copy_file_range_linux.go

index 604607f774a031e427f74ec70dbc4ee4e49ffcb6..7e6712581871bcdd0f127f6176f685194875e8a3 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:
+               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 {