I guess this also turns pyblock from the primary source to the fallback. If there are objections to this I could replace the dmsetup calls in the fallback code so that pyblock is still the first thing we try. Dave On Wed, 2011-01-19 at 20:35 -0600, David Lehman wrote: > --- > pyanaconda/storage/devicelibs/dm.py | 52 +++++++++++++++-------------------- > 1 files changed, 22 insertions(+), 30 deletions(-) > > diff --git a/pyanaconda/storage/devicelibs/dm.py b/pyanaconda/storage/devicelibs/dm.py > index d53803f..bd0a46c 100644 > --- a/pyanaconda/storage/devicelibs/dm.py > +++ b/pyanaconda/storage/devicelibs/dm.py > @@ -57,38 +57,30 @@ def dm_remove(map_name): > raise DMError("dm_remove (%s) failed: %s" % (map_name, msg)) > > def name_from_dm_node(dm_node): > - name = block.getNameFromDmNode(dm_node) > - if name is not None: > - return name > + # first, try sysfs > + name_file = "/sys/class/block/%s/dm/name" % dm_node > + try: > + name = open(name_file).read().strip() > + except IOError: > + # next, try pyblock > + name = block.getNameFromDmNode(dm_node) > > - st = os.stat("/dev/%s" % dm_node) > - major = os.major(st.st_rdev) > - minor = os.minor(st.st_rdev) > - name = iutil.execWithCapture("dmsetup", > - ["info", "--columns", > - "--noheadings", "-o", "name", > - "-j", str(major), "-m", str(minor)], > - stderr="/dev/tty5") > - log.debug("name_from_dm(%s) returning '%s'" % (dm_node, name.strip())) > - return name.strip() > + return name > > def dm_node_from_name(map_name): > - dm_node = block.getDmNodeFromName(map_name) > - if dm_node is not None: > - return dm_node > - > - devnum = iutil.execWithCapture("dmsetup", > - ["info", "--columns", > - "--noheadings", > - "-o", "devno", > - map_name], > - stderr="/dev/tty5") > - (major, sep, minor) = devnum.strip().partition(":") > - if not sep: > - raise DMError("dm device does not exist") > - > - dm_node = "dm-%d" % int(minor) > - log.debug("dm_node_from_name(%s) returning '%s'" % (map_name, dm_node)) > - return dm_node > + named_path = "/dev/mapper/%s" % map_name > + try: > + # /dev/mapper/ nodes are usually symlinks to /dev/dm-N > + node = os.path.basename(os.readlink(named_path)) > + except OSError: > + try: > + # dm devices' names are based on the block device minor > + st = os.stat(named_path) > + minor = os.minor(st.st_rdev) > + node = "dm-%d" % minor > + except OSError: > + # try pyblock > + node = block.getDmNodeFromName(map_name) > > + return node > _______________________________________________ Anaconda-devel-list mailing list Anaconda-devel-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/anaconda-devel-list