diff --git a/package/system/fstools/files/fstab.init b/package/system/fstools/files/fstab.init index 6c8c1d5310..ebac65fe32 100644 --- a/package/system/fstools/files/fstab.init +++ b/package/system/fstools/files/fstab.init @@ -5,6 +5,8 @@ START=11 +FS_CONSUMER=/tmp/.fstab.consumer + check_uuid() { blkid --uuid "$1" >/dev/null 2>&1 } @@ -22,10 +24,16 @@ wait_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 + [ "$enabled" = "0" ] && return 0 config_get target $1 "target" + target=${target%%/} [ -z "$target" -o "$target" = "/" -o "$target" = "/rom" -o "$target" = "/overlay" ] && return 0 + if [ "$essential" = "0" ]; then + [ -f $FS_CONSUMER ] || return 0 + grep -Fqxm1 "$target" $FS_CONSUMER || grep -q "^$target/" $FS_CONSUMER || return 0 + fi + /bin/mount | grep -qF " on $target type " && return 0 local uuid label device check_cmd @@ -54,15 +62,28 @@ wait_essential() { return 1 } +# for /lib/fstab.d/*.sh call +fstab_add_essential_mountpoint() { + echo "$1" >>$FS_CONSUMER.raw +} + 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 + + >$FS_CONSUMER.raw + include /lib/fstab.d + busybox sort -u $FS_CONSUMER.raw | grep / >$FS_CONSUMER + rm -f $FS_CONSUMER.raw + [ -s $FS_CONSUMER ] || rm -f $FS_CONSUMER + config_load fstab config_foreach wait_essential mount [ $TIMEOUT -gt 0 ] && echo "fstab: essential device(s) ready after $(($ORIG - $TIMEOUT)) seconds" >/dev/kmsg + rm -f $FS_CONSUMER } boot() {