764b0f3f07
1. Do not detach device forcefully when it's removed. This breaks libvirt (which thinks the device is still there). After this change, it is possible to detach device using libvirt, even if it was already removed physically from backend domain (unless it is dom0 - in which case it is still broken). So, this is partial fix for QubesOS/qubes-issues#1082. 2. Do not trigger "change" udev event when only QubesDB state needs to be updated - this leads to massive udev events queue, and heavy I/O usage - for example scanning all LVM many times. In some cases it even caused infinite event queue. 3. Do not use QUBES_EXPOSED udev property - it was needed a while back before QubesDB, because concurrent xenstore accesses are expensive (because of transactions). It isn't the problem on QubesDB. 4. Cache information about device-mapper, so it is possible to reconstruct it at device remove - when the actual device cannot be queried anymore. This is specifically about list of lower layer devices used. 5. Allow excluding loop devices pointing at a file in directory marked with ".qubes-exclude-block-devices" file. This is more generic than hardcoding /var/lib/qubes. QubesOS/qubes-issues#3084 Fixes QubesOS/qubes-issues#3073 QubesOS/qubes-issues#1082
17 lines
532 B
Bash
Executable File
17 lines
532 B
Bash
Executable File
#!/bin/sh
|
|
|
|
NAME=${DEVNAME#/dev/}
|
|
QDB_KEY="/qubes-block-devices/$NAME"
|
|
# Trailing slash is intentional - it will remove the whole directory, instead of
|
|
# a single base entry
|
|
qubesdb-rm "$QDB_KEY/"
|
|
qubesdb-write /qubes-block-devices ''
|
|
|
|
if [ -r /var/run/qubes/block-slave-cache-$NAME ]; then
|
|
# update info about underlying devices of device-mapper (if any);
|
|
for dev in $(cat /var/run/qubes/block-slave-cache-$NAME); do
|
|
udevadm trigger /sys/class/block/$dev
|
|
done
|
|
rm -f /var/run/qubes/block-slave-cache-$NAME
|
|
fi
|