Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Evergreen:11.4
xen
xen-bug776995-pvscsi-sysfs-parser.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File xen-bug776995-pvscsi-sysfs-parser.patch of Package xen
xend/pvscsi: update sysfs parser for Linux 3.0 The sysfs parser for /sys/bus/scsi/devices understands only the layout of kernel version 2.6.16. This looks as follows: /sys/bus/scsi/devices/1:0:0:0/block:sda is a symlink to /sys/block/sda/ /sys/bus/scsi/devices/1:0:0:0/scsi_generic:sg1 is a symlink to /sys/class/scsi_generic/sg1 Both directories contain a 'dev' file with the major:minor information. This patch updates the used regex strings to match also the colon to make it more robust against possible future changes. In kernel version 3.0 the layout changed: /sys/bus/scsi/devices/ contains now additional symlinks to directories such as host1 and target1:0:0. This patch ignores these as they do not point to the desired scsi devices. They just clutter the devices array. The directory layout in '1:0:0:0' changed as well, the 'type:name' notation was replaced with 'type/name' directories: /sys/bus/scsi/devices/1:0:0:0/block/sda/ /sys/bus/scsi/devices/1:0:0:0/scsi_generic/sg1/ Both directories contain a 'dev' file with the major:minor information. This patch adds additional code to walk the subdir to find the 'dev' file to make sure the given subdirectory is really the kernel name. In addition this patch makes sure devname is not None. --- tools/python/xen/util/vscsi_util.py | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) Index: xen-4.1.2-testing/tools/python/xen/util/vscsi_util.py =================================================================== --- xen-4.1.2-testing.orig/tools/python/xen/util/vscsi_util.py +++ xen-4.1.2-testing/tools/python/xen/util/vscsi_util.py @@ -130,20 +130,36 @@ def _vscsi_get_scsidevices_by_sysfs(): for dirpath, dirnames, files in os.walk(sysfs_mnt + SYSFS_SCSI_PATH): for hctl in dirnames: + if len(hctl.split(':')) != 4: + continue paths = os.path.join(dirpath, hctl) devname = None sg = None scsi_id = None for f in os.listdir(paths): 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): + 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) + elif f == "block" or \ + f == "tape" or \ + f == "scsi_changer" or \ + f == "onstream_tape": + for dir in os.listdir(os.path.join(paths, f)): + if os.path.exists(os.path.join(paths, f, dir, "dev")): + devname = os.path.basename(dir) - if re.match('^scsi_generic', f): + if re.match('^scsi_generic:', f): sg = os.path.basename(realpath) + elif f == "scsi_generic": + for dir in os.listdir(os.path.join(paths, f)): + if os.path.exists(os.path.join(paths, f, dir, "dev")): + sg = os.path.basename(dir) + if sg: + if devname is None: + devname = sg scsi_id = _vscsi_get_scsiid(sg) devices.append([hctl, devname, sg, scsi_id])
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor