Use FcntlFstore to preallocate on Mac

This commit is contained in:
greatroar 2021-04-10 16:54:07 +02:00
parent efb10b3c40
commit 23531be272
1 changed files with 2 additions and 7 deletions

View File

@ -2,8 +2,6 @@ package restorer
import ( import (
"os" "os"
"runtime"
"unsafe"
"golang.org/x/sys/unix" "golang.org/x/sys/unix"
) )
@ -16,7 +14,7 @@ func preallocateFile(wr *os.File, size int64) error {
Offset: 0, Offset: 0,
Length: size, Length: size,
} }
_, err := unix.FcntlInt(wr.Fd(), unix.F_PREALLOCATE, int(uintptr(unsafe.Pointer(&fst)))) err := unix.FcntlFstore(wr.Fd(), unix.F_PREALLOCATE, &fst)
if err == nil { if err == nil {
return nil return nil
@ -24,10 +22,7 @@ func preallocateFile(wr *os.File, size int64) error {
// just take preallocation in any form, but still ask for everything // just take preallocation in any form, but still ask for everything
fst.Flags = unix.F_ALLOCATEALL fst.Flags = unix.F_ALLOCATEALL
_, err = unix.FcntlInt(wr.Fd(), unix.F_PREALLOCATE, int(uintptr(unsafe.Pointer(&fst)))) err = unix.FcntlFstore(wr.Fd(), unix.F_PREALLOCATE, &fst)
// Keep struct alive until fcntl has returned
runtime.KeepAlive(fst)
return err return err
} }