mirror of https://github.com/golang/go.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 <cherryyz@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com> Reviewed-by: Jeremy Faller <jeremy@golang.org>
This commit is contained in:
parent
57e32c4fbd
commit
d40b0a1494
|
|
@ -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))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue