From: Steven Hartland Date: Fri, 8 May 2020 12:09:00 +0000 (+0000) Subject: cmd/link: fix mode parameter to fallocate on Linux X-Git-Tag: go1.15beta1~162 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=d40b0a1494cc3b717207ce822d01d0f180627a3f;p=gostls13.git cmd/link: fix mode parameter to fallocate on Linux Fix the mode parameter to fallocate on Linux which is the operation mode and not the file mode as with os.OpenFile. Also handle syscall.EINTR. Fixes #38950 Change-Id: Ieed20d9ab5c8a49be51c9f9a42b7263f394a5261 Reviewed-on: https://go-review.googlesource.com/c/go/+/232805 Run-TryBot: Cherry Zhang TryBot-Result: Gobot Gobot Reviewed-by: Cherry Zhang Reviewed-by: Jeremy Faller --- diff --git a/src/cmd/link/internal/ld/outbuf_linux.go b/src/cmd/link/internal/ld/outbuf_linux.go index 93e621a70f..bd9a0c6761 100644 --- a/src/cmd/link/internal/ld/outbuf_linux.go +++ b/src/cmd/link/internal/ld/outbuf_linux.go @@ -7,5 +7,5 @@ package ld import "syscall" func (out *OutBuf) fallocate(size uint64) error { - return syscall.Fallocate(int(out.f.Fd()), outbufMode, 0, int64(size)) + return syscall.Fallocate(int(out.f.Fd()), 0, 0, int64(size)) } diff --git a/src/cmd/link/internal/ld/outbuf_mmap.go b/src/cmd/link/internal/ld/outbuf_mmap.go index e6ee041abb..e2e50cc84f 100644 --- a/src/cmd/link/internal/ld/outbuf_mmap.go +++ b/src/cmd/link/internal/ld/outbuf_mmap.go @@ -10,8 +10,12 @@ import ( "syscall" ) -func (out *OutBuf) Mmap(filesize uint64) error { - err := out.fallocate(filesize) +func (out *OutBuf) Mmap(filesize uint64) (err error) { + for { + if err = out.fallocate(filesize); err != syscall.EINTR { + break + } + } if err != nil { // Some file systems do not support fallocate. We ignore that error as linking // can still take place, but you might SIGBUS when you write to the mmapped