aboutsummaryrefslogtreecommitdiffstats
path: root/tools/hotplug
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2009-12-14 07:56:21 +0000
committerKeir Fraser <keir.fraser@citrix.com>2009-12-14 07:56:21 +0000
commitbbe624405fa32ec3a6cd0c57d4ffc2ea6cf625b9 (patch)
tree9034794b16b6bd42ed4a959ff53926e7f9ce75b2 /tools/hotplug
parent75b0781226de01514018cdaf94a9bedd8cccc5e6 (diff)
downloadxen-bbe624405fa32ec3a6cd0c57d4ffc2ea6cf625b9.tar.gz
xen-bbe624405fa32ec3a6cd0c57d4ffc2ea6cf625b9.tar.bz2
xen-bbe624405fa32ec3a6cd0c57d4ffc2ea6cf625b9.zip
Fix losetup -f not working on SLES10
Signed-off-by: Gary Grebus <gary.grebus@oracle.com>
Diffstat (limited to 'tools/hotplug')
-rw-r--r--tools/hotplug/Linux/block22
1 files changed, 21 insertions, 1 deletions
diff --git a/tools/hotplug/Linux/block b/tools/hotplug/Linux/block
index 36c76f39bf..1d9c917c79 100644
--- a/tools/hotplug/Linux/block
+++ b/tools/hotplug/Linux/block
@@ -16,6 +16,26 @@ expand_dev() {
echo -n $dev
}
+find_free_loopback_helper() {
+ local next_devnum=0
+ local busy_devnum
+ while read busy_devnum; do
+ if [ "$next_devnum" != "$busy_devnum" ]; then
+ break
+ fi
+ let next_devnum=$next_devnum+1
+ done
+ echo "/dev/loop${next_devnum}"
+}
+
+# Not all distros have "losetup -f"
+find_free_loopback_dev() {
+ local loopdev
+ loopdev=$(losetup -a | sed -e 's+^/dev/loop++' -e 's/:.*//' | find_free_loopback_helper)
+ if [ -n "$loopdev" ] && [ -b "$loopdev" ]; then
+ echo "$loopdev"
+ fi
+}
##
# check_sharing device mode
@@ -270,7 +290,7 @@ mount it read-write in a guest domain."
done
fi
- loopdev=$(losetup -f)
+ loopdev=$(find_free_loopback_dev)
if [ "$loopdev" = '' ]
then
release_lock "block"