rc.d/linux: Attempt to mount only if necessary

Currently, if the linux service is run twice, mount(8) fails with:

    mount: linprocfs: Device busy
    mount: linsysfs: Device busy
    mount: devfs: Device busy
    mount: fdescfs: Device busy
    mount: tmpfs: Device busy

It is a bit more user-friendly if before running mount(8) the service
checks if there are any file systems left to be mounted. This patch
implements this behavior.

Also, while here, create mount points directories (as suggested by
otis).

Reviewed by:	trasz
Approved by:	trasz (src)
Differential Revision:	https://reviews.freebsd.org/D32463

(cherry picked from commit 5690261858)
This commit is contained in:
Mateusz Piotrowski 2021-10-12 10:40:36 +02:00 committed by Edward Tomasz Napierala
parent cc6f50fc37
commit 0bf6e572bd

View File

@ -15,6 +15,17 @@ rcvar="linux_enable"
start_cmd="${name}_start"
stop_cmd=":"
linux_mount() {
local _fs _mount_point
_fs="$1"
_mount_point="$2"
shift 2
if ! mount | grep -q "^$_fs on $_mount_point ("; then
mkdir -p "$_mount_point"
mount "$@" -t "$_fs" "$_fs" "$_mount_point"
fi
}
linux_start()
{
local _emul_path _tmpdir
@ -62,11 +73,11 @@ linux_start()
fi
if checkyesno linux_mounts_enable; then
mount -o nocover -t linprocfs linprocfs "${_emul_path}/proc"
mount -o nocover -t linsysfs linsysfs "${_emul_path}/sys"
mount -o nocover -t devfs devfs "${_emul_path}/dev"
mount -o nocover,linrdlnk -t fdescfs fdescfs "${_emul_path}/dev/fd"
mount -o nocover,mode=1777 -t tmpfs tmpfs "${_emul_path}/dev/shm"
linux_mount linprocfs "${_emul_path}/proc" -o nocover
linux_mount linsysfs "${_emul_path}/sys" -o nocover
linux_mount devfs "${_emul_path}/dev" -o nocover
linux_mount fdescfs "${_emul_path}/dev/fd" -o nocover,linrdlnk
linux_mount tmpfs "${_emul_path}/dev/shm" -o nocover,mode=1777
fi
}