Patchwork initscripts: Create the volatiles cache atomically.

login
register
mail settings
Submitter James Limbouris
Date Feb. 29, 2012, 1:13 a.m.
Message ID <1330478026-3871-1-git-send-email-james@digitalmatter.com.au>
Download mbox | patch
Permalink /patch/22385/
State New
Headers show

Comments

James Limbouris - Feb. 29, 2012, 1:13 a.m.
If a machine loses power while building the volatiles cache, it will
continue to operate with an incomplete set of volatiles. Fix this by
updating atomically.

Signed-off-by: James Limbouris <james@digitalmatter.com.au>
---
 .../initscripts-1.0/populate-volatile.sh           |   10 ++++++----
 meta/recipes-core/initscripts/initscripts_1.0.bb   |    2 +-
 2 files changed, 7 insertions(+), 5 deletions(-)
Richard Purdie - March 2, 2012, 3:22 p.m.
On Wed, 2012-02-29 at 09:13 +0800, James Limbouris wrote:
> If a machine loses power while building the volatiles cache, it will
> continue to operate with an incomplete set of volatiles. Fix this by
> updating atomically.
> 
> Signed-off-by: James Limbouris <james@digitalmatter.com.au>
> ---
>  .../initscripts-1.0/populate-volatile.sh           |   10 ++++++----
>  meta/recipes-core/initscripts/initscripts_1.0.bb   |    2 +-
>  2 files changed, 7 insertions(+), 5 deletions(-)

Merged to master, thanks.

Richard

Patch

diff --git a/meta/recipes-core/initscripts/initscripts-1.0/populate-volatile.sh b/meta/recipes-core/initscripts/initscripts-1.0/populate-volatile.sh
index 1813fd1..4a99aff 100755
--- a/meta/recipes-core/initscripts/initscripts-1.0/populate-volatile.sh
+++ b/meta/recipes-core/initscripts/initscripts-1.0/populate-volatile.sh
@@ -22,7 +22,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."
@@ -37,7 +37,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."
@@ -49,7 +49,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
@@ -185,10 +185,12 @@  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
 
 if test -f /etc/ld.so.cache -a ! -f /var/run/ld.so.cache
diff --git a/meta/recipes-core/initscripts/initscripts_1.0.bb b/meta/recipes-core/initscripts/initscripts_1.0.bb
index e16f19f..68701ce 100644
--- a/meta/recipes-core/initscripts/initscripts_1.0.bb
+++ b/meta/recipes-core/initscripts/initscripts_1.0.bb
@@ -3,7 +3,7 @@  DESCRIPTION = "Initscripts provide the basic system startup initialization scrip
 SECTION = "base"
 LICENSE = "GPLv2"
 LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
-PR = "r131"
+PR = "r132"
 
 INHIBIT_DEFAULT_DEPS = "1"