I just tested this on the installer. Sinces X is busted I could just verify that the consecutive callings of activate will not traceback in pyblock. I would go ahead and commit. regards On Tue, Feb 17, 2009 at 04:48:55PM +0100, Hans de Goede wrote: > When comparing dm table entries we failed to correctly convert a > /dev/mapper/XXXX entry to a major:minor str (nested dmraid problem) also > in some cases when using a mirror, the string we build and the map of dm have > their disks swapped. > --- > device.py | 39 +++++++++++++++++---------------------- > 1 files changed, 17 insertions(+), 22 deletions(-) > > diff --git a/device.py b/device.py > index 1c0d7f3..cbf196c 100644 > --- a/device.py > +++ b/device.py > @@ -20,6 +20,7 @@ > > import sys as _sys > import os as _os > +import stat as _stat > import string as _string > > def DeviceMaps(): > @@ -668,26 +669,11 @@ class RaidSet: > return path.strip() > > try: > - newpath=path.split('/')[-1] > - pos = 0 > - dev = None > - num = None > - while pos < len(newpath): > - if newpath[pos].isdigit(): > - dev = newpath[:pos] > - num = newpath[pos:] > - break > - pos += 1 > - if dev is None: > - dev = newpath > - sysnewpath = None > - if num is None: > - sysnewpath = '/sys/block/%s/dev' % (dev,) > - else: > - sysnewpath = '/sys/block/%s/%s%s/dev' % (dev, dev, num) > - f = open(sysnewpath, 'r') > - l = f.readline() > - return l.strip() > + statinfo = _os.stat(path) > + if not _stat.S_ISBLK(statinfo.st_mode): > + return path.strip() > + > + return "%d:%d" % (statinfo.st_rdev/256, statinfo.st_rdev%256, ) > except: > return path.strip() > > @@ -696,13 +682,22 @@ class RaidSet: > table = [] > for part in parts: > table += [map_dev(part),] > - table = _string.join(table, ' ') > + tablestr = _string.join(table, ' ') > + # sometimes dmraid and dm have the disks of a mirror swapped > + if self.rs.dmTable.type == "mirror": > + tmp = table[8] > + table[8] = table[10] > + table[10] = tmp > + alt_tablestr = _string.join(table, ' ') > + else: > + alt_tablestr = None > > import dm as _dm > > for map in _dm.maps(): > # XXX wtf? why's it have a space at the end sometimes? > - if str(map.table).strip() == table: > + if str(map.table).strip() == tablestr or alt_tablestr and \ > + str(map.table).strip() == alt_tablestr: > self._RaidSet__map = map > self.active = True > del _dm > -- > 1.6.1.3 > > _______________________________________________ > Anaconda-devel-list mailing list > Anaconda-devel-list@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/anaconda-devel-list -- Joel Andres Granados Brno, Czech Republic, Red Hat. _______________________________________________ Anaconda-devel-list mailing list Anaconda-devel-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/anaconda-devel-list