From bf059e4050bd4f49e3665172360c8ede5e102157 Mon Sep 17 00:00:00 2001 From: Marek Marczykowski Date: Sun, 27 Jan 2013 00:02:30 +0100 Subject: [PATCH] dom0/udev: allow only one xenstore-write at the time This apparently causes deadlocks when many xenstore-write (one for each block device) called at the same time. --- misc/block_add_change | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/misc/block_add_change b/misc/block_add_change index b366f9d..7b65a2d 100755 --- a/misc/block_add_change +++ b/misc/block_add_change @@ -43,6 +43,17 @@ fi if [ -d /sys/$DEVPATH/loop ]; then DESC=$(cat /sys/$DEVPATH/loop/backing_file) 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" echo QUBES_EXPOSED=1