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>
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))
}
"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