 1aebb12f30
			
		
	
	
		1aebb12f30
		
	
	
	
	
		
			
			xenstore is very slow, so don't bother it when unneeded. Namely do not try to remove entries, which haven't even created.
		
			
				
	
	
		
			51 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | |
| 
 | |
| NAME=${DEVNAME#/dev/}
 | |
| DESC="${ID_MODEL} (${ID_FS_LABEL})"
 | |
| SIZE=$[ $(cat /sys/$DEVPATH/size) * 512 ]
 | |
| MODE=w
 | |
| XS_KEY="qubes-block-devices/$NAME"
 | |
| 
 | |
| xs_remove() {
 | |
|     if [ "$QUBES_EXPOSED" == "1" ]; then
 | |
|         xenstore-rm "$XS_KEY"
 | |
|     fi
 | |
|     echo QUBES_EXPOSED=0
 | |
| }
 | |
| 
 | |
| # Ignore mounted...
 | |
| if fgrep -q $DEVNAME /proc/mounts; then
 | |
|     xs_remove
 | |
|     exit 0
 | |
| fi
 | |
| # ... and used by device-mapper
 | |
| if [ -n "`ls -A /sys/$DEVPATH/holders 2> /dev/null`" ]; then
 | |
|     xs_remove
 | |
|     exit 0
 | |
| fi
 | |
| # ... and "empty" loop devices
 | |
| if [ "$MAJOR" -eq 7 -a ! -d /sys/$DEVPATH/loop ]; then
 | |
|     xs_remove
 | |
|     exit 0
 | |
| fi
 | |
| 
 | |
| # Special case for CD
 | |
| if [ "$ID_TYPE" = "cd" ]; then
 | |
|     if [ "$ID_CDROM_MEDIA" != "1" ]; then
 | |
|         # Hide empty cdrom drive
 | |
|         xs_remove
 | |
|         exit 0
 | |
|     fi
 | |
|     MODE=r
 | |
| fi
 | |
| 
 | |
| # Special description for loop devices
 | |
| if [ -d /sys/$DEVPATH/loop ]; then
 | |
|     DESC=$(cat /sys/$DEVPATH/loop/backing_file)
 | |
| fi
 | |
| xenstore-write "$XS_KEY/desc" "$DESC" "$XS_KEY/size" "$SIZE" "$XS_KEY/mode" "$MODE"
 | |
| echo QUBES_EXPOSED=1
 | |
| 
 | |
| # Make sure that block backend is loaded
 | |
| /sbin/modprobe xen-blkback 2> /dev/null || /sbin/modprobe blkbk
 |