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-devel

Re: [Xen-devel] [PATCH] xend: drbd improvements

Shriram Rajagopalan wrote:
> I was just looking over the patch on blkif.py and I believe there is a bug.
> --- a/tools/python/xen/util/blkif.py  Fri Dec 10 18:08:19 2010 +0000
> +++ b/tools/python/xen/util/blkif.py  Wed Jan 05 23:31:24 2011 +0000
> @@ -71,15 +71,8 @@ def _parse_uname(uname):
>      if uname.find(":") != -1:
>          (typ, fn) = uname.split(":", 1)
>
> -        if typ == "phy" and not fn.startswith("/"):
> +        if typ in ("phy", "drbd") and not fn.startswith("/"):
>              fn = "/dev/%s" %(fn,)
> -
> -        if typ == "drbd":
> -            if not fn.startswith("drbd"):
> -                (drbdadmstdin, drbdadmstdout) =
> os.popen2(["/sbin/drbdadm", "sh-dev", fn])
> -                fn = drbdadmstdout.readline().strip()
> -            else:
> -                fn = "/dev/%s" %(fn,)
>
>          if typ in ("tap", "tap2"):
>              (taptype, fn) = fn.split(":", 1
>
>
>  When you specify a drbd disk for a domU, its format is
>   drbd:<resourceName>
>   

Correct.  Sadly, I forgot I was testing on SLES, which contains local
xend patches to fix problems wrt external block scripts.  One of the
patches has existed for ages, before many of us were working on xen
:-).  I would really like to get these changes upstream, even though
xend is dying.  The first patch is a revert of
http://xenbits.xensource.com/xen-unstable.hg?rev/152257350930.  The
second patch, which I've rebased against -unstable, is attached.  Can
you test it?

Thanks,
Jim


# HG changeset patch
# User Jim Fehlig <jfehlig@xxxxxxxxxx>
# Date 1294700641 25200
# Node ID c6c50a9ecd4f2f5088f63a19c2de99020bd80139
# Parent  7b4c82f07281ad9c48b652e2a305a7be607c5283
xend: improve psudeo-bootloader support for external block scripts

Userspace tools support external block scripts (e.g. block-drbd
provided by drbd project).  The psuedo-bootloader setup code in
xend has a few limitations wrt external block scripts, which this
patch addresses.

blkif.py: parse_uname() utility function should be able to parse a
disk specifier understood by the rest of the tools.

XendDomainInfo.py: Block devices using external block scripts must
be attached to dom0 before running the psuedo-bootloader.

    Signed-off-by: Jim Fehlig <jfehlig@xxxxxxxxxx>

diff -r 7b4c82f07281 -r c6c50a9ecd4f tools/python/xen/util/blkif.py
--- a/tools/python/xen/util/blkif.py    Wed Jan 05 23:54:15 2011 +0000
+++ b/tools/python/xen/util/blkif.py    Mon Jan 10 16:04:01 2011 -0700
@@ -66,8 +66,8 @@
                 'type'         : 'Disk' }
     return val
 
-def _parse_uname(uname):
-    fn = taptype = None
+def parse_uname(uname):
+    fn = typ = taptype = None
     if uname.find(":") != -1:
         (typ, fn) = uname.split(":", 1)
 
@@ -76,15 +76,18 @@
                
         if typ in ("tap", "tap2"):
             (taptype, fn) = fn.split(":", 1)
-    return (fn, taptype)
+            if taptype in ("tapdisk", "ioemu"):
+                (taptype, fn) = fn.split(":", 1)
+    return (fn, (typ,taptype))
+
 
 def blkdev_uname_to_file(uname):
     """Take a blkdev uname and return the corresponding filename."""
-    return _parse_uname(uname)[0]
+    return parse_uname(uname)[0]
 
 def blkdev_uname_to_taptype(uname):
     """Take a blkdev uname and return the blktap type."""
-    return _parse_uname(uname)[1]
+    return parse_uname(uname)[1]
 
 def mount_mode(name):
     mode = None
diff -r 7b4c82f07281 -r c6c50a9ecd4f tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py   Wed Jan 05 23:54:15 2011 +0000
+++ b/tools/python/xen/xend/XendDomainInfo.py   Mon Jan 10 16:04:01 2011 -0700
@@ -38,7 +38,7 @@
 
 import xen.lowlevel.xc
 from xen.util import asserts, auxbin, mkdir
-from xen.util.blkif import blkdev_uname_to_file, blkdev_uname_to_taptype
+from xen.util.blkif import parse_uname
 import xen.util.xsm.xsm as security
 from xen.util import xsconstants
 from xen.util import mkdir
@@ -3248,9 +3248,18 @@
             devtype = devinfo[0]
             disk = devinfo[1]['uname']
 
-            fn = blkdev_uname_to_file(disk)
-            taptype = blkdev_uname_to_taptype(disk)
-            mounted = devtype in ['tap', 'tap2'] and taptype != 'aio' and 
taptype != 'sync' and not os.stat(fn).st_rdev
+            (fn, types) = parse_uname(disk)
+            def _shouldMount(types):
+                if types[0] in ('file', 'phy'):
+                    return False
+                if types[0] in ('tap', 'tap2'):
+                    if types[1] in ('aio', 'sync'):
+                        return False
+                    else:
+                        return True
+                return os.access('/etc/xen/scripts/block-%s' % types[0], 
os.X_OK)
+
+            mounted = _shouldMount(types)
             mounted_vbd_uuid = 0
             if mounted:
                 # This is a file, not a device.  pygrub can cope with a
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel