33 lines
		
	
	
		
			859 B
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			33 lines
		
	
	
		
			859 B
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/sh
 | |
| 
 | |
| NAME=${DEVNAME#/dev/}
 | |
| XS_KEY="qubes-block-devices/$NAME"
 | |
| xenstore-rm "$XS_KEY"
 | |
| 
 | |
| # 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
 | 
