package/fstools: fstab supports waiting essential mount point on boot
This commit is contained in:
parent
cff738370e
commit
48fa786cbb
@ -21,7 +21,7 @@ PKG_LICENSE:=GPL-2.0
|
||||
PKG_LICENSE_FILES:=
|
||||
|
||||
PKG_USE_MIPS16:=0
|
||||
PKG_FLAGS:=nonshared
|
||||
PKG_FLAGS:=nonshared hold
|
||||
|
||||
PKG_BUILD_DEPENDS := util-linux
|
||||
PKG_CONFIG_DEPENDS := CONFIG_NAND_SUPPORT CONFIG_FSTOOLS_UBIFS_EXTROOT
|
||||
@ -79,7 +79,7 @@ define Package/block-mount
|
||||
SECTION:=base
|
||||
CATEGORY:=Base system
|
||||
TITLE:=Block device mounting and checking
|
||||
DEPENDS:=+ubox +libubox +libuci +libblobmsg-json +libjson-c
|
||||
DEPENDS:=+ubox +libubox +libuci +libblobmsg-json +libjson-c +blkid
|
||||
endef
|
||||
|
||||
define Package/blockd
|
||||
|
||||
@ -3,7 +3,68 @@
|
||||
|
||||
START=40
|
||||
|
||||
check_uuid() {
|
||||
blkid --uuid "$1" >/dev/null 2>&1
|
||||
}
|
||||
check_label() {
|
||||
blkid --label "$1" >/dev/null 2>&1
|
||||
}
|
||||
check_device() {
|
||||
[ -b "$1" ] >/dev/null 2>&1
|
||||
}
|
||||
|
||||
wait_essential() {
|
||||
local enabled
|
||||
local target
|
||||
local essential
|
||||
[ $TIMEOUT -gt 0 ] || return 1
|
||||
config_get_bool enabled $1 "enabled" "0"
|
||||
config_get_bool essential $1 essential "0"
|
||||
[ "$enabled" = "0" -o "$essential" = "0" ] && return 0
|
||||
config_get target $1 "target"
|
||||
[ -z "$target" -o "$target" = "/" -o "$target" = "/rom" -o "$target" = "/overlay" ] && return 0
|
||||
|
||||
/bin/mount | grep -qF " on $target type " && return 0
|
||||
|
||||
local uuid label device check_cmd
|
||||
config_get uuid $1 "uuid"
|
||||
config_get label $1 "label"
|
||||
config_get device $1 "device"
|
||||
if [ -n "$uuid" ]; then
|
||||
check_cmd="check_uuid \"$uuid\""
|
||||
elif [ -n "$label" ]; then
|
||||
check_cmd="check_label \"$label\""
|
||||
elif [ -n "$device" ]; then
|
||||
check_cmd="check_device \"$device\""
|
||||
else
|
||||
return 0
|
||||
fi
|
||||
while :; do
|
||||
eval "$check_cmd" && return 0
|
||||
TIMEOUT=$(($TIMEOUT - 1))
|
||||
if [ $TIMEOUT -gt 0 ]; then
|
||||
sleep 1
|
||||
else
|
||||
break
|
||||
fi
|
||||
done
|
||||
echo "fstab: wait essential device(s) timeout on $check_cmd" >/dev/kmsg
|
||||
return 1
|
||||
}
|
||||
|
||||
check_block_ready() {
|
||||
TIMEOUT=$(uci -q get fstab.@global[0].essential_timeout)
|
||||
[ -z "$TIMEOUT" ] && TIMEOUT=5
|
||||
[ $TIMEOUT -ge 0 ] || return 0
|
||||
TIMEOUT=$(($TIMEOUT + 1))
|
||||
local ORIG=$TIMEOUT
|
||||
config_load fstab
|
||||
config_foreach wait_essential mount
|
||||
[ $TIMEOUT -gt 0 ] && echo "fstab: essential device(s) ready after $(($ORIG - $TIMEOUT)) seconds" >/dev/kmsg
|
||||
}
|
||||
|
||||
boot() {
|
||||
( check_block_ready )
|
||||
/sbin/block mount
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user