From dc41fbad79fbee9c29a81b5792593a5b109d430c Mon Sep 17 00:00:00 2001 From: Marek Marczykowski Date: Fri, 7 Jun 2013 05:21:41 +0200 Subject: [PATCH] Use Qubes DB instead of Xenstore --- udev/udev-block-add-change | 22 +++++++++------------- udev/udev-block-remove | 5 +++-- udev/udev-qubes-block.rules | 2 +- udev/udev-qubes-usb.rules | 2 +- udev/udev-usb-add-change | 9 +++++---- udev/udev-usb-remove | 5 +++-- 6 files changed, 22 insertions(+), 23 deletions(-) diff --git a/udev/udev-block-add-change b/udev/udev-block-add-change index fe90f29..791ed97 100755 --- a/udev/udev-block-add-change +++ b/udev/udev-block-add-change @@ -5,11 +5,12 @@ NAME=${DEVNAME#/dev/} DESC="`echo "${ID_MODEL} (${ID_FS_LABEL})" | iconv -f utf8 -t ascii//TRANSLIT`" SIZE=$[ $(cat /sys/$DEVPATH/size) * 512 ] MODE=w -XS_KEY="qubes-block-devices/$NAME" +QDB_KEY="/qubes-block-devices/$NAME" xs_remove() { if [ "$QUBES_EXPOSED" == "1" ]; then - xenstore-rm "$XS_KEY" + qubesdb-rm "$QDB_KEY" + qubesdb-write /qubes-block-devices '' fi echo QUBES_EXPOSED=0 } @@ -59,17 +60,12 @@ if [ -n "$DM_NAME" ]; then DESC="$DM_NAME" fi -# Get lock only in dom0 - there are so many block devices so it causes xenstore -# deadlocks sometimes. -if [ -f /etc/qubes-release ]; then - # Skip xenstore-write if cannot obtain lock. This can mean very early system startup - # stage without /run mounted (or populated). Devices will be rediscovered later - # by qubes-core startup script. - exec 9>>/var/run/qubes/block-xenstore.lock || exit 0 - flock 9 -fi - -xenstore-write "$XS_KEY/desc" "$DESC" "$XS_KEY/size" "$SIZE" "$XS_KEY/mode" "$MODE" +# The last one is meant to trigger watches +qubesdb-write \ + "$QDB_KEY/desc" "$DESC" \ + "$XS_KEY/size" "$SIZE" \ + "$XS_KEY/mode" "$MODE" \ + /qubes-block-devices '' echo QUBES_EXPOSED=1 # Make sure that block backend is loaded diff --git a/udev/udev-block-remove b/udev/udev-block-remove index 21502c3..8d8d107 100755 --- a/udev/udev-block-remove +++ b/udev/udev-block-remove @@ -1,8 +1,9 @@ #!/bin/sh NAME=${DEVNAME#/dev/} -XS_KEY="qubes-block-devices/$NAME" -xenstore-rm "$XS_KEY" +QDB_KEY="/qubes-block-devices/$NAME" +qubesdb-rm "$XS_KEY" +qubesdb-write /qubes-block-devices '' # If device was connected to some VM - detach it # Notice: this can be run also in VM, so we cannot use xl... diff --git a/udev/udev-qubes-block.rules b/udev/udev-qubes-block.rules index 8a84995..1710a83 100644 --- a/udev/udev-qubes-block.rules +++ b/udev/udev-qubes-block.rules @@ -1,4 +1,4 @@ -# Expose all (except xen-frontend) block devices via xenstore +# Expose all (except xen-frontend) block devices via Qubes DB # Only block devices are interesting SUBSYSTEM!="block", GOTO="qubes_block_end" diff --git a/udev/udev-qubes-usb.rules b/udev/udev-qubes-usb.rules index cd4e038..5b85bfd 100644 --- a/udev/udev-qubes-usb.rules +++ b/udev/udev-qubes-usb.rules @@ -1,4 +1,4 @@ -# Expose all USB devices (except block) via xenstore +# Expose all USB devices (except block) via Qubes DB # Handle only USB devices SUBSYSTEM!="usb", GOTO="qubes_usb_end" diff --git a/udev/udev-usb-add-change b/udev/udev-usb-add-change index fe966e0..515840d 100755 --- a/udev/udev-usb-add-change +++ b/udev/udev-usb-add-change @@ -12,7 +12,7 @@ [ "`echo $TYPE | cut -f1 -d/`" = "9" ] && exit 0 [ "$DEVTYPE" != "usb_device" ] && exit 0 -# xenstore doesn't allow dot in key name +# qubesdb doesn't allow dot in key name XSNAME=`basename ${DEVPATH} | tr . _` # FIXME: For some devices (my Cherry keyboard) ID_SERIAL does not @@ -31,10 +31,11 @@ else exit 0 fi -XS_KEY="qubes-usb-devices/$XSNAME" +QDB_KEY="/qubes-usb-devices/$XSNAME" -xenstore-write "$XS_KEY/desc" "$DESC" -xenstore-write "$XS_KEY/usb-ver" "$VERSION" +qubesdb-write "$QDB_KEY/desc" "$DESC" +qubesdb-write "$QDB_KEY/usb-ver" "$VERSION" +qubesdb-write /qubes-usb-devices '' # Make sure PVUSB backend driver is loaded. /sbin/modprobe xen-usbback 2> /dev/null || /sbin/modprobe usbbk diff --git a/udev/udev-usb-remove b/udev/udev-usb-remove index aa562fa..5a728bf 100755 --- a/udev/udev-usb-remove +++ b/udev/udev-usb-remove @@ -4,6 +4,7 @@ [ "`echo $TYPE | cut -f1 -d/`" = "9" ] && exit 0 NAME=`basename ${DEVPATH} | tr . _` -XS_KEY="qubes-usb-devices/$NAME" +QDB_KEY="/qubes-usb-devices/$NAME" -xenstore-rm "$XS_KEY" +qubesdb-rm "$QDB_KEY" +qubesdb-write /qubes-usb-devices ''