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] xend: Fix and clean up vscsi_util.py and

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] xend: Fix and clean up vscsi_util.py and other files
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Wed, 22 Oct 2008 07:51:00 -0700
Delivery-date: Wed, 22 Oct 2008 07:53:53 -0700
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 1224585801 -3600
# Node ID 4b5823f292ea7c0caea7a1238f93aed66818f7bf
# Parent  ecdbcd27490facb15dbffb5b8591d73503708f72
xend: Fix and clean up vscsi_util.py and other files

Signed-off-by: Masaki Kanno <kanno.masaki@xxxxxxxxxxxxxx>
Acked-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
---
 tools/python/xen/util/vscsi_util.py |  110 +++++++++++++-----------------------
 tools/python/xen/xm/create.py       |    9 --
 tools/python/xen/xm/main.py         |   12 +--
 3 files changed, 51 insertions(+), 80 deletions(-)

diff -r ecdbcd27490f -r 4b5823f292ea tools/python/xen/util/vscsi_util.py
--- a/tools/python/xen/util/vscsi_util.py       Tue Oct 21 11:39:57 2008 +0100
+++ b/tools/python/xen/util/vscsi_util.py       Tue Oct 21 11:43:21 2008 +0100
@@ -36,28 +36,27 @@ SYSFS_SCSI_DEV_REVISION_PATH = '/rev'
 SYSFS_SCSI_DEV_REVISION_PATH = '/rev'
 SYSFS_SCSI_DEV_SCSILEVEL_PATH = '/scsi_level'
 
-def _vscsi_hctl_block(name, scsi_devices):
-    """ block-device name is convert into hctl. (e.g., '/dev/sda',
-    '0:0:0:0')"""
+def _vscsi_get_devname_by(name, scsi_devices):
+    """A device name is gotten by the HCTL.
+    (e.g., '0:0:0:0' to '/dev/sda')
+    """
+
     try:
         search = re.compile(r'' + name + '$', re.DOTALL)
     except Exception, e:
         raise VmError("vscsi: invalid expression. " + str(e))
-    chk = 0
-    for hctl, block, sg, scsi_id in scsi_devices:
+
+    for hctl, devname, sg, scsi_id in scsi_devices:
         if search.match(hctl):
-            chk = 1
-            break
-
-    if chk:
-        return (hctl, block)
-    else:
-        return (None, None)
-
-
-def _vscsi_block_scsiid_to_hctl(phyname, scsi_devices):
-    """ block-device name is convert into hctl. (e.g., '/dev/sda',
-    '0:0:0:0')"""
+            return (hctl, devname)
+
+    return (None, None)
+
+
+def _vscsi_get_hctl_by(phyname, scsi_devices):
+    """An HCTL is gotten by the device name or the scsi_id.
+    (e.g., '/dev/sda' to '0:0:0:0')
+    """
     
     if re.match('/dev/sd[a-z]+([1-9]|1[0-5])?$', phyname):
         # sd driver
@@ -72,30 +71,15 @@ def _vscsi_block_scsiid_to_hctl(phyname,
         # scsi_id -gu
         name = phyname
 
-    chk = 0
-    for hctl, block, sg, scsi_id in scsi_devices:
-        if block == name:
-            chk = 1
-            break
-        elif sg == name:
-            chk = 1
-            break
-        elif scsi_id == name:
-            chk = 1
-            break
-
-    if chk:
-        return (hctl, block)
-    else:
-        return (None, None)
+    for hctl, devname, sg, scsi_id in scsi_devices:
+        if name in [devname, sg, scsi_id]:
+            return (hctl, devname)
+
+    return (None, None)
 
 
 def vscsi_get_scsidevices():
     """ get all scsi devices"""
-
-    # KAF: Stubbed out for now due to bogus use of os.chdir() and because
-    # the devices.append() line can fail due to sg and scsi_id not defined.
-    return []
 
     devices = []
     sysfs_mnt = utils.find_sysfs_mount() 
@@ -103,46 +87,36 @@ def vscsi_get_scsidevices():
     for dirpath, dirnames, files in os.walk(sysfs_mnt + SYSFS_SCSI_PATH):
         for hctl in dirnames:
             paths = os.path.join(dirpath, hctl)
-            block = "-"
+            devname = None
+            sg = None
+            scsi_id = None
             for f in os.listdir(paths):
-                if re.match('^block', f):
-                    os.chdir(os.path.join(paths, f))
-                    block = os.path.basename(os.getcwd())
-                elif re.match('^tape', f):
-                    os.chdir(os.path.join(paths, f))
-                    block = os.path.basename(os.getcwd())
-                elif re.match('^scsi_changer', f):
-                    os.chdir(os.path.join(paths, f))
-                    block = os.path.basename(os.getcwd())
-                elif re.match('^onstream_tape', f):
-                    os.chdir(os.path.join(paths, f))
-                    block = os.path.basename(os.getcwd())
+                realpath = os.path.realpath(os.path.join(paths, f))
+                if  re.match('^block', f) or \
+                    re.match('^tape', f) or \
+                    re.match('^scsi_changer', f) or \
+                    re.match('^onstream_tape', f):
+                    devname = os.path.basename(realpath)
 
                 if re.match('^scsi_generic', f):
-                    os.chdir(os.path.join(paths, f))
-                    sg = os.path.basename(os.getcwd())
+                    sg = os.path.basename(realpath)
                     lines = os.popen('/sbin/scsi_id -gu -s 
/class/scsi_generic/' + sg).read().split()
-                    if len(lines) == 0:
-                        scsi_id = '-'
-                    else:
+                    if len(lines):
                         scsi_id = lines[0]
 
-            devices.append([hctl, block, sg, scsi_id])
+            devices.append([hctl, devname, sg, scsi_id])
 
     return devices
 
 
-def vscsi_search_hctl_and_block(device):
-
-    scsi_devices = vscsi_get_scsidevices()
-
-    tmp = device.split(':')
-    if len(tmp) == 4:
-        (hctl, block) = _vscsi_hctl_block(device, scsi_devices)
+def vscsi_get_hctl_and_devname_by(target, scsi_devices = None):
+    if scsi_devices is None:
+        scsi_devices = vscsi_get_scsidevices()
+
+    if len(target.split(':')) == 4:
+        return _vscsi_get_devname_by(target, scsi_devices)
     else:
-        (hctl, block) = _vscsi_block_scsiid_to_hctl(device, scsi_devices)
-
-    return (hctl, block)
+        return _vscsi_get_hctl_by(target, scsi_devices)
 
 
 def get_scsi_vendor(pHCTL):
@@ -216,9 +190,9 @@ def get_all_scsi_devices():
             'sg_name': scsi_info[2],
             'scsi_id': None
         }
-        if scsi_info[1] != '-':
+        if scsi_info[1] is not None:
             scsi_dev['dev_name'] = scsi_info[1] 
-        if scsi_info[3] != '-':
+        if scsi_info[3] is not None:
             scsi_dev['scsi_id'] = scsi_info[3] 
 
         scsi_dev['vendor_name'] = \
diff -r ecdbcd27490f -r 4b5823f292ea tools/python/xen/xm/create.py
--- a/tools/python/xen/xm/create.py     Tue Oct 21 11:39:57 2008 +0100
+++ b/tools/python/xen/xm/create.py     Tue Oct 21 11:43:21 2008 +0100
@@ -703,11 +703,8 @@ def configure_vscsis(config_devs, vals):
 
     scsi_devices = vscsi_util.vscsi_get_scsidevices()
     for (p_dev, v_dev, backend) in vals.vscsi:
-        tmp = p_dev.split(':')
-        if len(tmp) == 4:
-            (p_hctl, block) = vscsi_util._vscsi_hctl_block(p_dev, scsi_devices)
-        else:
-            (p_hctl, block) = vscsi_util._vscsi_block_scsiid_to_hctl(p_dev, 
scsi_devices)
+        (p_hctl, devname) = \
+            vscsi_util.vscsi_get_hctl_and_devname_by(p_dev, scsi_devices)
 
         if p_hctl == None:
             raise ValueError("Cannot find device \"%s\"" % p_dev)
@@ -723,7 +720,7 @@ def configure_vscsis(config_devs, vals):
                         ['state', 'Initialising'], \
                         ['devid', devid], \
                         ['p-dev', p_hctl], \
-                        ['p-devname', block], \
+                        ['p-devname', devname], \
                         ['v-dev', v_dev] ])
 
         if vscsi_lookup_devid(devidlist, devid) == 0:
diff -r ecdbcd27490f -r 4b5823f292ea tools/python/xen/xm/main.py
--- a/tools/python/xen/xm/main.py       Tue Oct 21 11:39:57 2008 +0100
+++ b/tools/python/xen/xm/main.py       Tue Oct 21 11:43:21 2008 +0100
@@ -2491,20 +2491,20 @@ def parse_scsi_configuration(p_scsi, v_h
     if len(v) != 4:
         raise OptionError("Invalid argument: %s" % v_hctl)
 
+    p_hctl = None
+    devname = None
     if p_scsi is not None:
-        (p_hctl, block) = vscsi_util.vscsi_search_hctl_and_block(p_scsi)
-        if p_hctl == None:
+        (p_hctl, devname) = \
+            vscsi_util.vscsi_get_hctl_and_devname_by(p_scsi)
+        if p_hctl is None:
             raise OptionError("Cannot find device '%s'" % p_scsi)
-    else:
-        p_hctl = ''
-        block = ''
 
     scsi = ['vscsi']
     scsi.append(['dev', \
                  ['state', state], \
                  ['devid', int(v[0])], \
                  ['p-dev', p_hctl], \
-                 ['p-devname', block], \
+                 ['p-devname', devname], \
                  ['v-dev', v_hctl] \
                ])
 

_______________________________________________
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] xend: Fix and clean up vscsi_util.py and other files, Xen patchbot-unstable <=