Browse Source

block-mount: Fixed mount deadlocks due to buggy use of locks in /lib/functions/block.sh

SVN-Revision: 21987
Daniel Dickinson 15 years ago
parent
commit
e56dcdcffd
1 changed files with 20 additions and 14 deletions
  1. 20 14
      package/block-mount/files/block.sh

+ 20 - 14
package/block-mount/files/block.sh

@@ -118,15 +118,18 @@ config_create_swap_fstab_entry() {
 
 
 	[ -n "$device" ] || return 0
 	[ -n "$device" ] || return 0
 
 
-	local fstabnew="$(mktemp -t '.fstab.XXXXXXXX')"
+	local fstabnew
 	
 	
 	mkdir -p /var/lock
 	mkdir -p /var/lock
-	lock /var/lock/fstab.lck
-	cat /tmp/fstab | grep -E -v "^$device[[:blank:]]" >>"$fstabnew"
-	[ "$enabled" -eq 1 ] && echo "$device	none	swap	sw	0	0" >> "$fstabnew"
-	cat "$fstabnew" >/tmp/fstab
-	lock -u /var/lock/fstab.lck
-	rm -f $fstabnew
+	lock -w /var/lock/fstab.lck && {
+		lock /var/lock/fstab.lck
+		fstabnew="$(mktemp -t '.fstab.XXXXXXXX')"
+		cat /tmp/fstab | grep -E -v "^$device[[:blank:]]" >>"$fstabnew"
+		[ "$enabled" -eq 1 ] && echo "$device	none	swap	sw	0	0" >> "$fstabnew"
+		cat "$fstabnew" >/tmp/fstab
+		rm -f $fstabnew
+		lock -u /var/lock/fstab.lck
+	}
 }
 }
 
 
 config_create_mount_fstab_entry() {
 config_create_mount_fstab_entry() {
@@ -140,15 +143,18 @@ config_create_mount_fstab_entry() {
 	[ -n "$target" ] || return 0
 	[ -n "$target" ] || return 0
 	[ -n "$device" ] || return 0
 	[ -n "$device" ] || return 0
 
 
-	local fstabnew="$(mktemp -t '.fstab.XXXXXXXX')"
+	local fstabnew
 	
 	
 	mkdir -p /var/lock
 	mkdir -p /var/lock
-	lock /var/lock/fstab.lck
-	cat /tmp/fstab | grep -E -v "^$device[[:blank:]]" | grep -v "$target" >>"$fstabnew"
-	echo "$device	$target	$fstype	$options	0	0" >>"$fstabnew"
-	cat "$fstabnew" >/tmp/fstab		
-	lock -u /var/lock/fstab.lck
-	rm -f $fstabnew
+	lock -w /var/lock/fstab.lck && {
+		lock /var/lock/fstab.lck
+		fstabnew="$(mktemp -t '.fstab.XXXXXXXX')"
+		cat /tmp/fstab | grep -E -v "^$device[[:blank:]]" | grep -v "$target" >>"$fstabnew"
+		echo "$device	$target	$fstype	$options	0	0" >>"$fstabnew"
+		cat "$fstabnew" >/tmp/fstab		
+		rm -f $fstabnew
+		lock -u /var/lock/fstab.lck
+	}
 }
 }
 
 
 libmount_find_token() {
 libmount_find_token() {