NetBSD/etc/rc.d/swap1
martin a52a4fdc24 Apply patch from Ian D. Leroux in PR bin/51019:
when unmounting tmpfs file systems at shutdown time, avoid unmounting
a tmpfs created by init on /dev - behaviour overridable from rc.conf.
By default all tmpfs that have device nodes are not mounted.
2018-10-19 14:11:12 +00:00

76 lines
1.6 KiB
Bash
Executable File

#!/bin/sh
#
# $NetBSD: swap1,v 1.13 2018/10/19 14:11:12 martin 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 safetly 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"