 bfe28d5ee6
			
		
	
	
		bfe28d5ee6
		
	
	
	
	
		
			
			Apparently locking mechanism in xen hotplug scripts isn't working. This is workaround before it will be fixed in xen...
		
			
				
	
	
		
			61 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | |
| 
 | |
| HOTPLUG_STORE="/var/run/xen-hotplug/${XENBUS_PATH//\//-}"
 | |
| 
 | |
| hd_arr[10]=a
 | |
| hd_arr[11]=b
 | |
| hd_arr[12]=c
 | |
| hd_arr[13]=d
 | |
| hd_arr[14]=e
 | |
| hd_arr[15]=f
 | |
| 
 | |
| hexdigit()
 | |
| {
 | |
| 	if [ $1 -lt 10 ] ; then 
 | |
| 		RET=$1
 | |
| 	else 
 | |
| 		RET=${hd_arr[$1]}
 | |
| 	fi
 | |
| }
 | |
| 
 | |
| hexnumber()
 | |
| {
 | |
| 	hexdigit $(($1/16))
 | |
| 	ret2=$RET
 | |
| 	hexdigit $(($1%16))
 | |
| 	HEXNUMBER="$ret2"$RET
 | |
| }
 | |
| 
 | |
| 
 | |
| process()
 | |
| {
 | |
| 	if ! [ "x""$1" = "xfile" ] ; then
 | |
| 		exec flock /var/run/qubes/hotplug-block /etc/xen/scripts/block $ORIG_ARGS	
 | |
| 	fi
 | |
| 	while true ; do
 | |
| 		dev=$(losetup -f --show $2)
 | |
| 		if [ -n "$dev" ] ; then break ; fi
 | |
| 	done
 | |
| 	hexnumber ${dev:9:70}
 | |
| 	xenstore-write "$XENBUS_PATH/node" "$dev" \
 | |
| 		"$XENBUS_PATH/physical-device" "7:"$HEXNUMBER \
 | |
|  		"$XENBUS_PATH/hotplug-status" connected
 | |
| 	echo "$dev" > "$HOTPLUG_STORE-node"
 | |
| 	echo "file" > "$HOTPLUG_STORE-type"
 | |
| }
 | |
| 
 | |
| #exec 2>>/tmp/block.$$
 | |
| #set -x
 | |
| export PATH="/sbin:/bin:/usr/bin:/usr/sbin:$PATH"
 | |
| 
 | |
| XENBUS_PATH="${XENBUS_PATH:?}"
 | |
| if ! [ "$1" = "add" ] || ! [ -f /var/run/qubes/fast_block_attach ] ; then
 | |
| 	exec flock /var/run/qubes/hotplug-block /etc/xen/scripts/block "$@"
 | |
| fi
 | |
| 
 | |
| ORIG_ARGS="$@"
 | |
|   
 | |
| vars=$(xenstore-read "$XENBUS_PATH/type" "$XENBUS_PATH/params")
 | |
| process $vars
 | |
| exit 0
 |