From: Gary Grebus <Gary.Grebus@oracle.com>
To: xen-devel <xen-devel@lists.xensource.com>
Subject: [PATCH 2/2] Fix problems with vbd hotplug on Linux
Date: Mon, 02 Nov 2009 16:35:22 -0500 [thread overview]
Message-ID: <4AEF509A.4010703@oracle.com> (raw)
Speed up finding a loopback device for vbd hotplug.
- Use the device and inode information provided by losetup to find
if the vbd backing file is in use on another vbd.
- Use losetup to find a free loopback device.
Signed-off-by: Gary Grebus <gary.grebus@oracle.com>
diff -r 3c31d19aa975 tools/hotplug/Linux/block
--- a/tools/hotplug/Linux/block Mon Oct 26 12:42:38 2009 -0400
+++ b/tools/hotplug/Linux/block Mon Oct 26 12:44:10 2009 -0400
@@ -250,94 +250,27 @@
mount it read-write in a guest domain."
fi
- loopdev=''
- for dev in /dev/loop*
- do
- if [ ! -b "$dev" ]
+ if [ "x$mode" != 'x!' ]
+ then
+ inode=$(stat -c '%i' $file)
+ dev=$(stat -c '%D' $file)
+ if [ -z "$inode" ] || [ -z "$dev" ]
then
- continue
+ fatal "Unable to lookup $file: dev: $dev inode: $inode"
fi
- f=$(losetup "$dev" 2>/dev/null) || f=''
-
- if [ "$f" ]
- then
- # $dev is in use. Check sharing.
- if [ "x$mode" = 'x!' ]
- then
- continue
- fi
-
- f=$(echo "$f" | sed -e 's/.*(\(.*\)).*/\1/g')
-
- # $f is the filename, as read from losetup, but the loopback
- # driver truncates filenames at 64 characters, so we need to go
- # trawling through the store if it's longer than that. Truncation
- # is indicated by an asterisk at the end of the filename.
- if expr index "$f" '*' >/dev/null
- then
- found=""
- for dom in $(xenstore-list "$XENBUS_BASE_PATH")
- do
- for domdev in $(xenstore-list "$XENBUS_BASE_PATH/$dom")
- do
- d=$(xenstore_read_default \
- "$XENBUS_BASE_PATH/$dom/$domdev/node" "")
- if [ "$d" = "$dev" ]
- then
- f=$(xenstore_read "$XENBUS_BASE_PATH/$dom/$domdev/params")
- found=1
- break 2
- fi
- done
- done
-
- if [ ! "$found" ]
- then
- # This loopback device is in use by someone else, so skip it.
- log debug "Loopback sharing check skips device $dev."
- continue
- fi
- fi
-
- # Canonicalise the filename for the comparison.
-
- # I have seen this readlink fails because the filename given by
- # losetup is only the basename. This cannot happen when the loop
- # device is set up through this script, because file is
- # canonicalised above, but it may happen when loop devices are set
- # up some other way. This readlink may also conceivably fail if
- # the file backing this loop device has been removed.
-
- # For maximum safety, in the case that $f does not resolve, we
- # assume that $file and $f are in the same directory.
-
- # If you create a loopback filesystem, remove it and continue to
- # run on it, and then create another file with the same name, then
- # this check will block that -- don't do that.
-
- # If you create loop devices through some other mechanism, use
- # relative filenames, and then use the same filename through this
- # script, then this check will block that -- don't do that either.
-
- f=$(readlink -f "$f" || echo $(dirname "$file")/$(basename "$f"))
-
-
- if [ "$f" = "$file" ]
+ shared_list=$(losetup -a | grep ' \[0*'${dev}'\]:'${inode} |
+ cut -d : -f 1)
+ for dev in "$shared_list"
+ do
+ if [ -n "$dev" ]
then
check_file_sharing "$file" "$dev" "$mode"
fi
- else
- # $dev is not in use, so we'll remember it for use later; we want
- # to finish the sharing check first.
+ done
+ fi
- if [ "$loopdev" = '' ]
- then
- loopdev="$dev"
- fi
- fi
- done
-
+ loopdev=$(losetup -f)
if [ "$loopdev" = '' ]
then
release_lock "block"
reply other threads:[~2009-11-02 21:35 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4AEF509A.4010703@oracle.com \
--to=gary.grebus@oracle.com \
--cc=xen-devel@lists.xensource.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.