aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Bächler <thomas@archlinux.org>2010-01-05 13:33:38 +0100
committerThomas Bächler <thomas@archlinux.org>2010-01-05 13:33:38 +0100
commitb95fd8ecfb7633f2db4c42b5eb798b55a2e4fb34 (patch)
tree7f90382e0a7539bed0d7c4c143611ba87b752fef
parentd7622e0cedbcfd6bda7ac0b8354c6fea5d127f37 (diff)
parent48a9e6a27b1fb240eb4861841ffbece3af714fe3 (diff)
downloadinitscripts-b95fd8ecfb7633f2db4c42b5eb798b55a2e4fb34.tar.xz
Merge branch 'hwclock-background' of git://code.toofishes.net/dan/initscripts
-rwxr-xr-xrc.sysinit32
1 files changed, 25 insertions, 7 deletions
diff --git a/rc.sysinit b/rc.sysinit
index 0c934c7..4e079ad 100755
--- a/rc.sysinit
+++ b/rc.sysinit
@@ -54,8 +54,14 @@ if [ -n "$HWCLOCK_PARAMS" ]; then
/bin/ln -s /dev/rtc0 /dev/rtc
fi
- # Set clock early to fix some bugs with filesystem checks
- # Clock is set again later to match rc.conf
+ # Do a clock set here for a few reasons:
+ # 1. Make creation time on udev nodes sane (FS#8665)
+ # 2. Filesystem checks can depend on system time
+ # 3. This will set the clock, if using non-UTC, off the last known
+ # configured timezone. Any new timezone put in rc.conf is copied over at
+ # a later time.
+ # This does *NOT* take into account a time adjustment file as /var may not be
+ # mounted yet. A second set occurs later to match rc.conf.
if [ -f /etc/localtime ]; then
/sbin/hwclock $HWCLOCK_PARAMS --noadjfile
fi
@@ -273,17 +279,24 @@ stat_done
status "Activating Swap" /sbin/swapon -a
stat_busy "Configuring System Clock"
-if [ ! -f /var/lib/hwclock/adjtime ]; then
- echo "0.0 0 0.0" > /var/lib/hwclock/adjtime
-fi
if [ "$TIMEZONE" != "" -a -e "/usr/share/zoneinfo/$TIMEZONE" ]; then
/bin/rm -f /etc/localtime
/bin/cp "/usr/share/zoneinfo/$TIMEZONE" /etc/localtime
fi
+clock_pid=""
if [ -n "$HWCLOCK_PARAMS" ]; then
- /sbin/hwclock --adjust #Adjust for system drift
+ # This time, we set the clock for real. Use the adjustment file now that
+ # /var will definitely be available, and then set the system clock once
+ # the hardware clock has been adjusted accordingly. The backgrounding magic
+ # is due to the fact that the second call to hwclock will almost always
+ # take ~1 second because of the clock granularity, and we might as well
+ # stay busy.
+ (
+ /sbin/hwclock --adjust
/sbin/hwclock $HWCLOCK_PARAMS
+ ) &
+ clock_pid=$!
fi
stat_done
@@ -396,7 +409,12 @@ fi
/bin/dmesg >| /var/log/dmesg.log
+# final hwclock setting needs to be done at this point
+if [ -n "$clock_pid" ]; then
+ wait $clock_pid
+fi
+
run_hook sysinit_end
# End of file
-# vim: set ts=2 noet:
+# vim: set ts=2 sw=2 noet: