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.
This commit is contained in:
martin 2018-10-19 14:11:12 +00:00
parent aaeacaa744
commit a52a4fdc24
3 changed files with 64 additions and 6 deletions

View File

@ -1,4 +1,4 @@
# $NetBSD: rc.conf,v 1.145 2018/09/23 07:24:19 maxv Exp $
# $NetBSD: rc.conf,v 1.146 2018/10/19 14:11:12 martin Exp $
#
# /etc/defaults/rc.conf --
# default configuration of /etc/rc.conf
@ -99,6 +99,12 @@ no_swap=NO # Set to YES if you have purposefully setup no swap
# partitions and don't want to be warned about it.
swapoff=YES # Remove block-type swap partitions upon shutdown
# This defaults to yes, so that raids shutdown cleanly
swapoff_umount=auto # Set to 'manual' to umount the tmpfs partitions listed
# in swapoff_umount_fs before removing swap. Set to
# 'auto' to umount all tmpfs paritions that contain
# no device nodes.
swapoff_umount_fs= # space-separated list of tmpfs mount points to umount
# before removing swap if swapoff_umount=manual
# Concatenated disk driver.
#

View File

@ -1,6 +1,6 @@
#!/bin/sh
#
# $NetBSD: swap1,v 1.12 2015/04/20 18:01:46 prlw1 Exp $
# $NetBSD: swap1,v 1.13 2018/10/19 14:11:12 martin Exp $
#
# PROVIDE: localswap
@ -13,6 +13,40 @@ 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.
#
@ -31,8 +65,7 @@ swap1_start()
swap1_stop()
{
if checkyesno swapoff || [ -n "$rc_force" ]; then
echo "Forcibly unmounting tmpfs filesystems"
umount -aft tmpfs
umount_vm_consumers
echo "Removing block-type swap devices"
swapctl -U -t blk || [ $? = 2 ]
fi

View File

@ -1,4 +1,4 @@
.\" $NetBSD: rc.conf.5,v 1.177 2018/10/01 11:16:04 uwe Exp $
.\" $NetBSD: rc.conf.5,v 1.178 2018/10/19 14:11:12 martin Exp $
.\"
.\" Copyright (c) 1996 Matthew R. Green
.\" All rights reserved.
@ -55,7 +55,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.Dd September 23, 2018
.Dd October 19, 2018
.Dt RC.CONF 5
.Os
.Sh NAME
@ -353,6 +353,25 @@ Defaults to false.
Boolean value.
Remove block-type swap devices at shutdown time.
Useful if swapping onto RAIDframe devices.
.It Sy swapoff_umount
.Dq "auto"
or
.Dq "manual" .
Before removing block-type swap devices, it is wise to unmount tmpfs filesystems to avoid having to swap their contents back into RAM.
By default
.Dq ( "auto" )
all tmpfs filesystems that contain no device nodes are unmounted.
Set to
.Dq "manual"
to explicitly specify which filesystems to unmount before removing swap.
.It Sy swapoff_umount_fs
A space-separated list of absolute paths to tmpfs mount points.
If
.Sy swapoff_umount
is set to
.Dq "manual" ,
these tmpfs filesystems will be forcibly unmounted before removing block-type
swap devices.
.It Sy var_shm_symlink
A path.
If set, names a path that