diff options
author | James Limbouris <james@digitalmatter.com.au> | 2011-06-07 17:35:26 +0800 |
---|---|---|
committer | Paul Menzel <paulepanter@users.sourceforge.net> | 2011-06-09 22:09:48 +0200 |
commit | 9a799fb3464b61df51f5e772c693cd76ad948f28 (patch) | |
tree | d265e435ae9e102adc1d5150579ba59f4378eb01 | |
parent | 0052931adafee8db2bc4c9221934aa2ebae8f69b (diff) | |
download | openembedded-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-x | recipes/initscripts/initscripts-1.0/populate-volatile.sh | 10 |
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 |