76 lines
1.6 KiB
Bash
Executable File
76 lines
1.6 KiB
Bash
Executable File
#!/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"
|