29 lines
570 B
Go
29 lines
570 B
Go
package fsutil
|
|
|
|
import (
|
|
"os"
|
|
"syscall"
|
|
|
|
logging "github.com/ipfs/go-log/v2"
|
|
)
|
|
|
|
var log = logging.Logger("fsutil")
|
|
|
|
const FallocFlPunchHole = 0x02 // linux/falloc.h
|
|
|
|
func Deallocate(file *os.File, offset int64, length int64) error {
|
|
if length == 0 {
|
|
return nil
|
|
}
|
|
|
|
err := syscall.Fallocate(int(file.Fd()), FallocFlPunchHole, offset, length)
|
|
if errno, ok := err.(syscall.Errno); ok {
|
|
if errno == syscall.EOPNOTSUPP || errno == syscall.ENOSYS {
|
|
log.Warnf("could not deallocate space, ignoring: %v", errno)
|
|
err = nil // log and ignore
|
|
}
|
|
}
|
|
|
|
return err
|
|
}
|