#!/bin/sh # # $NetBSD: swap1,v 1.14 2022/04/16 18:15:20 andvar Exp $ # # PROVIDE: localswap # REQUIRE: DISKS root # KEYWORD: shutdown $_rc_subr_loaded . /etc/rc.subr name="swap1" start_cmd="swap1_start" stop_cmd="swap1_stop" dev_free_tmpfs() { # Generate a list of tmpfs filesystems that contain no device nodes, # which can presumably be unmounted safely at shutdown time. # Filenames are quoted and the list contains no unquoted newlines, # so that the output can be reparsed as a single argument list. mount -t tmpfs | while read -r line do fs=${line#tmpfs on } fs=${fs% type tmpfs*} find -x "${fs}" \( -type b -or -type c \) -exit 1 && echo -n "'${fs}' " done } umount_vm_consumers() { case ${swapoff_umount} in auto) swapoff_umount_fs="$(dev_free_tmpfs)" ;; manual) # swapoff_umount_fs set manually ;; esac # eval so that quotes within $swapoff_umount_fs are parsed properly eval set -- "${swapoff_umount_fs}" for fs in "$@" do echo "Forcibly unmounting ${fs}" umount -ft tmpfs "${fs}" done } # Add all block-type swap devices; these might be necessary # during disk checks. # swap1_start() { # Treat exit status 2 from swapctl(8) as successful; it means # "no error, but no suitable swap devices were configured". # if ! checkyesno no_swap; then swapctl -A -t blk || [ $? = 2 ] fi } # Remove all block-type swap devices # swap1_stop() { if checkyesno swapoff || [ -n "$rc_force" ]; then umount_vm_consumers echo "Removing block-type swap devices" swapctl -U -t blk || [ $? = 2 ] fi } load_rc_config swap run_rc_command "$1"