File: xen-hotplug-cleanup

package info (click to toggle)
xen-common 4.0.0-1
  • links: PTS
  • area: main
  • in suites: squeeze
  • size: 876 kB
  • ctags: 362
  • sloc: sh: 3,061; makefile: 403; perl: 186; python: 174; xml: 2
file content (43 lines) | stat: -rw-r--r-- 1,439 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#! /bin/bash

dir=$(dirname "$0")
. "$dir/xen-hotplug-common.sh"

# Claim the lock protecting ${XEN_SCRIPT_DIR}/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]}"

  # if the vm path does not exist and the device class is 'vbd' then we may have
  # a tap2 device
  if [ $(xenstore-read "$vm_dev" 2>/dev/null) != "" ] \
       && [ "${path_array[1]}" = "vbd" ]; then
    vm_dev="$vm/device/tap2/${path_array[3]}"
  fi
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"