Add swap fstab entry support

This commit is contained in:
EnumDev 2025-03-15 09:23:01 +02:00
parent 74868ab2d3
commit b4847da839

View File

@ -1,10 +1,12 @@
package main package main
import ( import (
"fmt"
"golang.org/x/sys/unix" "golang.org/x/sys/unix"
"os" "os"
"slices" "slices"
"strings" "strings"
"unsafe"
) )
var flagsEquivalence = map[string]uintptr{ var flagsEquivalence = map[string]uintptr{
@ -111,6 +113,8 @@ func mountFstabEntries() error {
return err return err
} }
swapPriority := -2
for _, line := range strings.Split(string(bytes), "\n") { for _, line := range strings.Split(string(bytes), "\n") {
line = strings.TrimSpace(line) line = strings.TrimSpace(line)
if strings.HasPrefix(line, "#") || line == "" { if strings.HasPrefix(line, "#") || line == "" {
@ -128,6 +132,18 @@ func mountFstabEntries() error {
continue continue
} }
if fstype == "swap" {
b := append([]byte(source), 0)
const SwapFlagPrioShift = 0
const SwapFlagPrioMask = 0x7fff
_, _, err := unix.Syscall(unix.SYS_SWAPON, uintptr(unsafe.Pointer(&b[0])), uintptr((swapPriority<<SwapFlagPrioShift)&SwapFlagPrioMask), 0)
swapPriority--
if err != 0 {
return fmt.Errorf("swapon syscall returned none-zero error code: %d", err)
}
continue
}
if isMountpoint(target) && !slices.Contains(flags, unix.MS_REMOUNT) { if isMountpoint(target) && !slices.Contains(flags, unix.MS_REMOUNT) {
flags = append(flags, unix.MS_REMOUNT) flags = append(flags, unix.MS_REMOUNT)
} }