2011-09-29 13:49:52 +02:00
|
|
|
#!/bin/sh
|
|
|
|
|
|
|
|
NAME=${DEVNAME#/dev/}
|
|
|
|
XS_KEY="qubes-block-devices/$NAME"
|
|
|
|
xenstore-rm "$XS_KEY"
|
2011-09-30 03:36:06 +02:00
|
|
|
|
|
|
|
# If device was connected to some VM - detach it
|
|
|
|
# Notice: this can be run also in VM, so we cannot use xl...
|
|
|
|
|
|
|
|
device_detach() {
|
|
|
|
xs_path=$1
|
|
|
|
|
|
|
|
xenstore-write $xs_path/online 0 $xs_path/state 5
|
|
|
|
|
|
|
|
# Wait for backend to finish dev shutdown
|
|
|
|
try=30
|
|
|
|
# -lt will break loop also when 'state' will be empty
|
|
|
|
while [ "`xenstore-read $xs_path/state 2> /dev/null`" -lt 6 ]; do
|
|
|
|
try=$[ $try - 1 ]
|
|
|
|
[ "$try" -le 0 ] && break
|
|
|
|
sleep 0.1
|
|
|
|
done
|
|
|
|
xenstore-rm $xs_path
|
|
|
|
}
|
|
|
|
|
|
|
|
for XS_DEV_PATH in `xenstore-ls -f backend/vbd | grep 'backend/vbd/[0-9]*/[0-9]* ' | cut -f 1 -d ' '`; do
|
|
|
|
CUR_DEVICE=`xenstore-read "$XS_DEV_PATH/params"`
|
|
|
|
if [ "$CUR_DEVICE" == "$DEVNAME" ]; then
|
|
|
|
device_detach "$XS_DEV_PATH"
|
|
|
|
exit 0
|
|
|
|
fi
|
|
|
|
done
|