[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] Break out the hotplug cleanup code into xen-hotplug-cleanup. Claim the block



# HG changeset patch
# User emellor@xxxxxxxxxxxxxxxxxxxxxx
# Node ID 2d1aaebcbdf7c33e73540128bc4fcd0e0b347d42
# Parent  3cfd8150da41166875bffc360ef67f3e63d95da3
Break out the hotplug cleanup code into xen-hotplug-cleanup. Claim the block
script's lock before doing the cleanup, to avoid a race that causes the message
"xenstore-list: could not list path backend/vbd/40" in /var/log/hotplug.log,
with a subsequent refusal to create the domain, after a domain reboot.

This is equivalent to xen-unstable changeset 9003:b30564f40914 (though it's been
rebased to 3.0-testing).

Signed-off-by: Ewan Mellor <ewan@xxxxxxxxxxxxx>

diff -r 3cfd8150da41 -r 2d1aaebcbdf7 tools/examples/Makefile
--- a/tools/examples/Makefile   Sun Feb 26 15:48:51 2006
+++ b/tools/examples/Makefile   Wed Mar  8 22:56:37 2006
@@ -27,6 +27,7 @@
 XEN_SCRIPTS += block
 XEN_SCRIPTS += block-enbd block-nbd
 XEN_SCRIPTS += vtpm
+XEN_SCRIPTS += xen-hotplug-cleanup
 XEN_SCRIPT_DATA = xen-script-common.sh
 XEN_SCRIPT_DATA += xen-hotplug-common.sh xen-network-common.sh vif-common.sh
 XEN_SCRIPT_DATA += block-common.sh vtpm-common.sh
diff -r 3cfd8150da41 -r 2d1aaebcbdf7 tools/examples/xen-backend.agent
--- a/tools/examples/xen-backend.agent  Sun Feb 26 15:48:51 2006
+++ b/tools/examples/xen-backend.agent  Wed Mar  8 22:56:37 2006
@@ -18,12 +18,7 @@
   add)
     ;;
   remove)
-    # remove device frontend store entries
-    xenstore-rm -t $(xenstore-read "$XENBUS_PATH/frontend") || true
-
-    # remove device backend store entries
-    xenstore-rm -t "$XENBUS_PATH"       || true
-    xenstore-rm -t "error/$XENBUS_PATH" || true
+    /etc/xen/scripts/xen-hotplug-cleanup
     ;;
   online)
     ;;
diff -r 3cfd8150da41 -r 2d1aaebcbdf7 tools/examples/xen-backend.rules
--- a/tools/examples/xen-backend.rules  Sun Feb 26 15:48:51 2006
+++ b/tools/examples/xen-backend.rules  Wed Mar  8 22:56:37 2006
@@ -2,6 +2,4 @@
 SUBSYSTEM=="xen-backend", KERNEL=="vtpm*", RUN+="/etc/xen/scripts/vtpm 
$env{ACTION}"
 SUBSYSTEM=="xen-backend", KERNEL=="vif*", ACTION=="online", RUN+="$env{script} 
online"
 SUBSYSTEM=="xen-backend", KERNEL=="vif*", ACTION=="offline", 
RUN+="$env{script} offline"
-SUBSYSTEM=="xen-backend", ACTION=="remove", RUN+="/bin/bash -c 
'/usr/bin/xenstore-rm -t $$(/usr/bin/xenstore-read $env{XENBUS_PATH}/frontend)'"
-SUBSYSTEM=="xen-backend", ACTION=="remove", RUN+="/usr/bin/xenstore-rm -t 
$env{XENBUS_PATH}"
-SUBSYSTEM=="xen-backend", ACTION=="remove", RUN+="/usr/bin/xenstore-rm -t 
error/$env{XENBUS_PATH}"
+SUBSYSTEM=="xen-backend", ACTION=="remove", 
RUN+="/etc/xen/scripts/xen-hotplug-cleanup"
diff -r 3cfd8150da41 -r 2d1aaebcbdf7 tools/examples/xen-hotplug-cleanup
--- /dev/null   Sun Feb 26 15:48:51 2006
+++ b/tools/examples/xen-hotplug-cleanup        Wed Mar  8 22:56:37 2006
@@ -0,0 +1,21 @@
+#! /bin/sh
+
+dir=$(dirname "$0")
+. "$dir/xen-hotplug-common.sh"
+
+# Claim the lock protecting /etc/xen/scripts/block.  This stops a race whereby
+# paths in the store would disappear underneath that script as it attempted to
+# read from the store checking for device sharing.
+# Any other scripts that do similar things will have to have their lock
+# claimed too.
+# This is pretty horrible, but there's not really a nicer way of solving this.
+claim_lock "block"
+
+# remove device frontend store entries
+xenstore-rm -t $(xenstore-read "$XENBUS_PATH/frontend") || true
+
+# remove device backend store entries
+xenstore-rm -t "$XENBUS_PATH"       || true
+xenstore-rm -t "error/$XENBUS_PATH" || true
+
+release_lock "block"

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.