internal/poll: check return value instead of errno for copy_file_range(2)

There is one special case of (0, nil) indicating EOF where the updates
of zero to remain and written are redundant.

Change-Id: I017471657a9424fab88c72d14d3eb66d14a7e5c7
Reviewed-on: https://go-review.googlesource.com/c/go/+/609297
Run-TryBot: Andy Pan <panjf2000@gmail.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Auto-Submit: Ian Lance Taylor <iant@google.com>
This commit is contained in:
Andy Pan 2024-08-29 13:01:12 +08:00 committed by Gopher Robot
parent acce4558a0
commit 3da6c94d5e
2 changed files with 2 additions and 2 deletions

View File

@ -22,7 +22,7 @@ func handleCopyFileRangeErr(err error, copied, written int64) (bool, error) {
switch err {
case syscall.ENOSYS:
// The copy_file_range(2) function first appeared in FreeBSD 13.0.
// Go supports FreeBSD>= 12, so the system call
// Go supports FreeBSD >= 12, so the system call
// may not be present. We've detected the FreeBSD version with
// unix.SupportCopyFileRange() at the beginning of this function,
// but we still want to check for ENOSYS here to prevent some rare

View File

@ -24,7 +24,7 @@ func CopyFileRange(dst, src *FD, remain int64) (written int64, handled bool, err
max = maxCopyFileRangeRound
}
n, e := copyFileRange(dst, src, int(max))
if e == nil {
if n > 0 {
remain -= n
written += n
}