dom0+vm/qvm-block: speed up udev block handler (#560)

xenstore is very slow, so don't bother it when unneeded. Namely do not try to
remove entries, which haven't even created.
This commit is contained in:
Marek Marczykowski 2012-06-06 02:12:10 +02:00
parent 3e89b33209
commit 871d4485b9
2 changed files with 14 additions and 6 deletions

View File

@ -6,19 +6,26 @@ 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
xenstore-rm "$XS_KEY"
xs_remove
exit 0
fi
# ... and used by device-mapper
if [ -n "`ls -A /sys/$DEVPATH/holders 2> /dev/null`" ]; then
xenstore-rm "$XS_KEY"
xs_remove
exit 0
fi
# ... and "empty" loop devices
if [ "$MAJOR" -eq 7 -a ! -d /sys/$DEVPATH/loop ]; then
xenstore-rm "$XS_KEY"
xs_remove
exit 0
fi
@ -26,7 +33,7 @@ fi
if [ "$ID_TYPE" = "cd" ]; then
if [ "$ID_CDROM_MEDIA" != "1" ]; then
# Hide empty cdrom drive
xenstore-rm "$XS_KEY"
xs_remove
exit 0
fi
MODE=r
@ -37,6 +44,7 @@ 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

View File

@ -9,8 +9,8 @@ ENV{MAJOR}=="202", GOTO="qubes_block_end"
# Skip device-mapper devices
ENV{MAJOR}=="253", GOTO="qubes_block_end"
ACTION=="add", RUN+="/usr/lib/qubes/block_add_change"
ACTION=="change", RUN+="/usr/lib/qubes/block_add_change"
ACTION=="add", IMPORT{program}="/usr/lib/qubes/block_add_change"
ACTION=="change", IMPORT{program}="/usr/lib/qubes/block_add_change"
ACTION=="remove", RUN+="/usr/lib/qubes/block_remove"
LABEL="qubes_block_end"