Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

os: copy_file_range system call fails on some file systems [1.15 backport] #44273

Closed
gopherbot opened this issue Feb 15, 2021 · 2 comments
Closed
Labels
CherryPickApproved Used during the release process for point releases FrozenDueToAge
Milestone

Comments

@gopherbot
Copy link

@ianlancetaylor requested issue #44272 to be considered for backport to the next 1.15 minor release.

@gopherbot Please open backport to Go 1.15.

This bug can cause file corruption when using io.Copy with files on certain file systems. There is no reasonable workaround other than avoiding io.Copy.

@gopherbot gopherbot added the CherryPickCandidate Used during the release process for point releases label Feb 15, 2021
@gopherbot gopherbot added this to the Go1.15.9 milestone Feb 15, 2021
@gopherbot
Copy link
Author

Change https://golang.org/cl/292289 mentions this issue: [release-branch.go1.15] internal/poll: if copy_file_range returns 0, assume it failed

gopherbot pushed a commit that referenced this issue Feb 16, 2021
…assume it failed

On current Linux kernels copy_file_range does not correctly handle
files in certain special file systems, such as /proc. For those file
systems it fails to copy any data and returns zero. This breaks Go's
io.Copy for those files.

Fix the problem by assuming that if copy_file_range returns 0 the
first time it is called on a file, that that file is not supported.
In that case fall back to just using read. This will force an extra
system call when using io.Copy to copy a zero-sized normal file,
but at least it will work correctly.

For #36817
For #44272
Fixes #44273

Change-Id: I02e81872cb70fda0ce5485e2ea712f219132e614
Reviewed-on: https://go-review.googlesource.com/c/go/+/291989
Trust: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
(cherry picked from commit 30641e3)
Reviewed-on: https://go-review.googlesource.com/c/go/+/292289
@gopherbot
Copy link
Author

Closed by merging 023c466 to release-branch.go1.15.

@dmitshur dmitshur added CherryPickApproved Used during the release process for point releases and removed CherryPickCandidate Used during the release process for point releases labels Mar 4, 2021
@toothrot toothrot modified the milestones: Go1.15.9, Go1.15.10 Mar 10, 2021
@golang golang locked and limited conversation to collaborators Mar 10, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
CherryPickApproved Used during the release process for point releases FrozenDueToAge
Projects
None yet
Development

No branches or pull requests

3 participants