# 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
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"
xstransact.Remove(backpath)
xstransact.Remove(frontpath)
- # xstransact.Remove(self.devicePath()) ?? Below is the same ?
- self.vm._removeVm("device/%s/%d" % (self.deviceClass, dev))
+ # xstransact.Remove(self.devicePath()) ?? Below is the same ?
+ self.vm._removeVm("device/%s/%d" % (self.deviceClass, dev))
def configurations(self, transaction = None):
return map(lambda x: self.configuration(x, transaction), self.deviceIDs(transaction))