Add time_elapsed() function, subsuming $local_top_time

Generalize the elapsed time tracking in local-top so that it can be used
elsewhere. This requires some additional quoting in local_device_setup()
comparisons to pass shellcheck.

Now that the reference time is recorded earlier (in init vs. local-top),
the rootdev wait time will now be reduced by however long it it takes to
process init-premount. The belief is that our wait time is sufficiently
long for that to be negligible. Also, this could potentially break any
local-top scripts that use $local_top_time directly. A survey of
the current packages in sid shows no packages that contain a file under
/usr/share/initramfs-tools/scripts/local-top/ that contain "local_top_time".

Signed-off-by: dann frazier <dannf@debian.org>
This commit is contained in:
dann frazier 2020-10-26 17:25:18 -06:00 committed by dann frazier
parent cbbbb1b73e
commit 35177dbef0
3 changed files with 27 additions and 14 deletions

5
init
View File

@ -218,6 +218,10 @@ maybe_break modules
load_modules
[ "$quiet" != "y" ] && log_end_msg
starttime="$(_uptime)"
starttime=$((starttime + 1)) # round up
export starttime
if [ "$ROOTDELAY" ]; then
sleep "$ROOTDELAY"
fi
@ -310,6 +314,7 @@ unset noresume
unset fastboot
unset forcefsck
unset fsckfix
unset starttime
# Move virtual filesystems over to the real filesystem
mount -n -o move /sys ${rootmnt}/sys

View File

@ -144,6 +144,25 @@ load_modules()
fi
}
_uptime() {
local uptime
uptime="$(cat /proc/uptime)"
uptime="${uptime%%[. ]*}"
echo "$uptime"
}
time_elapsed() {
# shellcheck disable=SC2154
if [ -z "$starttime" ]; then
log_failure_msg "time_elapsed() called before \$starttime initialized"
echo 0
fi
local delta
delta="$(_uptime)"
delta=$((delta - starttime))
echo "$delta"
}
# lilo compatibility
parse_numeric() {
case $1 in

View File

@ -8,14 +8,6 @@ local_top()
[ "$quiet" != "y" ] && log_end_msg
fi
local_top_used=yes
# Start time for measuring elapsed time in local_device_setup
if [ -z "${local_top_time}" ]; then
local_top_time="$(cat /proc/uptime)"
local_top_time="${local_top_time%%[. ]*}"
local_top_time=$((local_top_time + 1)) # round up
export local_top_time
fi
}
local_block()
@ -44,7 +36,6 @@ local_bottom()
fi
local_premount_used=no
local_top_used=no
unset local_top_time
}
# $1=device ID to mount
@ -94,9 +85,7 @@ local_device_setup()
while true; do
sleep 1
time_elapsed="$(cat /proc/uptime)"
time_elapsed="${time_elapsed%%[. ]*}"
time_elapsed=$((time_elapsed - local_top_time))
time_elapsed="$(time_elapsed)"
local_block "${dev_id}"
@ -113,7 +102,7 @@ local_device_setup()
else
break
fi
if [ ${count} -ge ${time_elapsed} ]; then
if [ "${count}" -ge "${time_elapsed}" ]; then
break;
fi
/scripts/local-block/mdadm "${dev_id}"
@ -125,7 +114,7 @@ local_device_setup()
log_end_msg 0
break
fi
if [ ${time_elapsed} -ge "${slumber}" ]; then
if [ "${time_elapsed}" -ge "${slumber}" ]; then
log_end_msg 1 || true
break
fi