diff options
Diffstat (limited to 'os-plugins/plugins/xen/files/xen.examples/scripts/xen-hotplug-cleanup')
-rwxr-xr-x | os-plugins/plugins/xen/files/xen.examples/scripts/xen-hotplug-cleanup | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/os-plugins/plugins/xen/files/xen.examples/scripts/xen-hotplug-cleanup b/os-plugins/plugins/xen/files/xen.examples/scripts/xen-hotplug-cleanup new file mode 100755 index 00000000..706359d0 --- /dev/null +++ b/os-plugins/plugins/xen/files/xen.examples/scripts/xen-hotplug-cleanup @@ -0,0 +1,36 @@ +#! /bin/bash + +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" + +# split backend/DEVCLASS/VMID/DEVID on slashes +path_array=( ${XENBUS_PATH//\// } ) +# get /vm/UUID path +vm=$(xenstore_read_default "/local/domain/${path_array[2]}/vm" "") +# construct /vm/UUID/device/DEVCLASS/DEVID +if [ "$vm" != "" ]; then + vm_dev="$vm/device/${path_array[1]}/${path_array[3]}" +else + vm_dev= +fi + +# remove device frontend store entries +xenstore-rm -t \ + $(xenstore-read "$XENBUS_PATH/frontend" 2>/dev/null) 2>/dev/null || true + +# remove device backend store entries +xenstore-rm -t "$XENBUS_PATH" 2>/dev/null || true +xenstore-rm -t "error/$XENBUS_PATH" 2>/dev/null || true + +# remove device path from /vm/UUID +[ "$vm_dev" != "" ] && xenstore-rm -t "$vm_dev" 2>/dev/null || true + +release_lock "block" |