WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] Linux vbd hotplug: Speed up finding a loo

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] Linux vbd hotplug: Speed up finding a loopback device
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Tue, 03 Nov 2009 01:45:36 -0800
Delivery-date: Tue, 03 Nov 2009 01:45:58 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1257237561 0
# Node ID 830bda7a9c7565469abb5946c03ccad450197349
# Parent  2ddad83e9733b006afb1169fe8a1bc02cfa41848
Linux vbd hotplug: Speed up finding a loopback device

 - 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@xxxxxxxxxx>
---
 tools/hotplug/Linux/block |   97 +++++++---------------------------------------
 1 files changed, 15 insertions(+), 82 deletions(-)

diff -r 2ddad83e9733 -r 830bda7a9c75 tools/hotplug/Linux/block
--- a/tools/hotplug/Linux/block Tue Nov 03 08:38:55 2009 +0000
+++ b/tools/hotplug/Linux/block Tue Nov 03 08:39:21 2009 +0000
@@ -250,94 +250,27 @@ mount it read-write in a guest domain."
 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.
-
-            if [ "$loopdev" = '' ]
-            then
-              loopdev="$dev"
-            fi
-          fi
-        done
-
+          done
+        fi
+
+        loopdev=$(losetup -f)
         if [ "$loopdev" = '' ]
         then
           release_lock "block"

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] Linux vbd hotplug: Speed up finding a loopback device, Xen patchbot-unstable <=