aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames Limbouris <james@digitalmatter.com.au>2011-06-07 17:35:26 +0800
committerPaul Menzel <paulepanter@users.sourceforge.net>2011-06-09 22:09:48 +0200
commit9a799fb3464b61df51f5e772c693cd76ad948f28 (patch)
treed265e435ae9e102adc1d5150579ba59f4378eb01
parent0052931adafee8db2bc4c9221934aa2ebae8f69b (diff)
downloadopenembedded-9a799fb3464b61df51f5e772c693cd76ad948f28.tar.gz
initscripts: Modify 'populate-volatile.sh' to atomically update 'volatile.cache'
When power is lost before a new volatile.cache has been flushed to disk, it can be corrupted, leaving the volatiles uncreated and causing software failure during the next reboot. Since only the existence of volative.cache is checked for using a temporary file on the same volume and renaming it avoids this issue. The file is sync'd before the rename to avoid problems with newer caching filesystems, in which the rename is atomic, but the contents of the file may not yet be flushed. Signed-off-by: James Limbouris <james@digitalmatter.com.au> Acked-by: Paul Menzel <paulepanter@users.sourceforge.net>
-rwxr-xr-xrecipes/initscripts/initscripts-1.0/populate-volatile.sh10
1 files changed, 6 insertions, 4 deletions
diff --git a/recipes/initscripts/initscripts-1.0/populate-volatile.sh b/recipes/initscripts/initscripts-1.0/populate-volatile.sh
index 3bb3d94de6..f0a45eaea7 100755
--- a/recipes/initscripts/initscripts-1.0/populate-volatile.sh
+++ b/recipes/initscripts/initscripts-1.0/populate-volatile.sh
@@ -14,7 +14,7 @@ create_file() {
chown ${TUSER}.${TGROUP} $1 || echo \"Failed to set owner -${TUSER}- for -$1-.\" >/dev/tty0 2>&1;
chmod ${TMODE} $1 || echo \"Failed to set mode -${TMODE}- for -$1-.\" >/dev/tty0 2>&1 "
- test "$VOLATILE_ENABLE_CACHE" = yes && echo "$EXEC" >> /etc/volatile.cache
+ test "$VOLATILE_ENABLE_CACHE" = yes && echo "$EXEC" >> /etc/volatile.cache.build
[ -e "$1" ] && {
[ "${VERBOSE}" != "no" ] && echo "Target already exists. Skipping."
@@ -29,7 +29,7 @@ mk_dir() {
chown ${TUSER}.${TGROUP} $1 || echo \"Failed to set owner -${TUSER}- for -$1-.\" >/dev/tty0 2>&1;
chmod ${TMODE} $1 || echo \"Failed to set mode -${TMODE}- for -$1-.\" >/dev/tty0 2>&1 "
- test "$VOLATILE_ENABLE_CACHE" = yes && echo "$EXEC" >> /etc/volatile.cache
+ test "$VOLATILE_ENABLE_CACHE" = yes && echo "$EXEC" >> /etc/volatile.cache.build
[ -e "$1" ] && {
[ "${VERBOSE}" != "no" ] && echo "Target already exists. Skipping."
@@ -41,7 +41,7 @@ mk_dir() {
link_file() {
EXEC="test -e \"$2\" -o -L $2 || ln -s \"$1\" \"$2\" >/dev/tty0 2>&1"
- test "$VOLATILE_ENABLE_CACHE" = yes && echo " $EXEC" >> /etc/volatile.cache
+ test "$VOLATILE_ENABLE_CACHE" = yes && echo " $EXEC" >> /etc/volatile.cache.build
[ -e "$2" ] && {
echo "Cannot create link over existing -${TNAME}-." >&2
@@ -164,8 +164,10 @@ if test -e /etc/volatile.cache -a "$VOLATILE_ENABLE_CACHE" = "yes" -a "x$1" != "
then
sh /etc/volatile.cache
else
- rm -f /etc/volatile.cache
+ rm -f /etc/volatile.cache /etc/volatile.cache.build
for file in `ls -1 "${CFGDIR}" | sort`; do
apply_cfgfile "${CFGDIR}/${file}"
done
+
+ [ -e /etc/volatile.cache.build ] && sync && mv /etc/volatile.cache.build /etc/volatile.cache
fi