mirror of
https://github.com/octoleo/restic.git
synced 2024-11-25 22:27:35 +00:00
Merge pull request #3362 from greatroar/darwin-preallocate
Use FcntlFstore to preallocate on Mac
This commit is contained in:
commit
cc254dfefe
@ -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
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user