[PATCH 8/20] Use the BlockDev's DM plugin instead of devicelibs/dm.py

vpodzime installerbot-noreply at redhat.com
Fri Feb 27 15:31:52 UTC 2015


From: Vratislav Podzimek <vpodzime at redhat.com>

---
 blivet/devicelibs/dm.py     | 75 ---------------------------------------------
 blivet/devices/dm.py        | 13 ++++----
 blivet/devices/lvm.py       |  4 +--
 blivet/devices/partition.py |  8 ++---
 blivet/devicetree.py        |  9 +++---
 blivet/formats/__init__.py  |  7 ++---
 blivet/osinstall.py         |  3 +-
 7 files changed, 20 insertions(+), 99 deletions(-)
 delete mode 100644 blivet/devicelibs/dm.py

diff --git a/blivet/devicelibs/dm.py b/blivet/devicelibs/dm.py
deleted file mode 100644
index ca5497a..0000000
--- a/blivet/devicelibs/dm.py
+++ /dev/null
@@ -1,75 +0,0 @@
-#
-# dm.py
-# device-mapper functions
-#
-# Copyright (C) 2009  Red Hat, Inc.  All rights reserved.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-#
-# Author(s): Dave Lehman <dlehman at redhat.com>
-#
-
-import os
-
-import block
-from .. import util
-from ..errors import DMError
-
-import logging
-log = logging.getLogger("blivet")
-
-def dm_setup(args):
-    ret = util.run_program(["dmsetup"] + args)
-    if ret:
-        raise DMError("Failed to run dmsetup %s" % " ".join(args))
-
-def dm_create_linear(map_name, device, length, uuid):
-    table = "0 %d linear %s 0" % (length, device)
-    args = ["create", map_name, "--uuid", uuid, "--table", "%s" % table]
-    dm_setup(args)
-
-def dm_remove(map_name):
-    args = ["remove", map_name]
-    dm_setup(args)
-
-def name_from_dm_node(dm_node):
-    # 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)
-
-    return name
-
-def dm_node_from_name(map_name):
-    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)
-
-    if not node:
-        raise DMError("dm_node_from_name(%s) has failed." % node)
-
-    return node
diff --git a/blivet/devices/dm.py b/blivet/devices/dm.py
index 9234c6e..041cae2 100644
--- a/blivet/devices/dm.py
+++ b/blivet/devices/dm.py
@@ -21,8 +21,7 @@
 #
 
 import os
-
-from ..devicelibs import dm
+from gi.repository import BlockDev as blockdev
 import block
 
 from .. import errors
@@ -110,7 +109,7 @@ def getDMNode(self):
         if not self.exists:
             raise errors.DeviceError("device has not been created", self.name)
 
-        return dm.dm_node_from_name(self.name)
+        return blockdev.dm_node_from_name(self.name)
 
     def setupPartitions(self):
         log_method_call(self, name=self.name, kids=self.kids)
@@ -128,7 +127,7 @@ def teardownPartitions(self):
         for dev in os.listdir("/dev/mapper/"):
             prefix = self.name + "p"
             if dev.startswith(prefix) and dev[len(prefix):].isdigit():
-                dm.dm_remove(dev)
+                blockdev.dm_remove(dev)
 
     def _setName(self, value):
         """ Set the device's map name. """
@@ -183,8 +182,8 @@ def _setup(self, orig=False):
         log_method_call(self, self.name, orig=orig, status=self.status,
                         controllable=self.controllable)
         slave_length = self.slave.partedDevice.length
-        dm.dm_create_linear(self.name, self.slave.path, slave_length,
-                            self.dmUuid)
+        blockdev.dm_create_linear(self.name, self.slave.path, slave_length,
+                                  self.dmUuid)
 
     def _postSetup(self):
         StorageDevice._postSetup(self)
@@ -194,7 +193,7 @@ def _postSetup(self):
     def _teardown(self, recursive=False):
         self.teardownPartitions()
         udev.settle()
-        dm.dm_remove(self.name)
+        blockdev.dm_remove(self.name)
         udev.settle()
 
     def deactivate(self, recursive=False):
diff --git a/blivet/devices/lvm.py b/blivet/devices/lvm.py
index 1c72c86..cb39b07 100644
--- a/blivet/devices/lvm.py
+++ b/blivet/devices/lvm.py
@@ -24,10 +24,10 @@
 import abc
 import pprint
 import re
+from gi.repository import BlockDev as blockdev
 
 # device backend modules
 from ..devicelibs import lvm
-from ..devicelibs import dm
 
 from .. import errors
 from .. import util
@@ -598,7 +598,7 @@ def getDMNode(self):
         if not self.exists:
             raise errors.DeviceError("device has not been created", self.name)
 
-        return dm.dm_node_from_name(self.mapName)
+        return blockdev.dm_node_from_name(self.mapName)
 
     def _getName(self):
         """ This device's name. """
diff --git a/blivet/devices/partition.py b/blivet/devices/partition.py
index d77d9bf..504d7e1 100644
--- a/blivet/devices/partition.py
+++ b/blivet/devices/partition.py
@@ -22,6 +22,8 @@
 import os
 import parted
 import _ped
+from gi.repository import BlockDev as blockdev
+from gi.repository import GLib
 
 from .. import errors
 from .. import util
@@ -32,8 +34,6 @@
 from ..formats import DeviceFormat, getFormat
 from ..size import Size, MiB
 
-from ..devicelibs import dm
-
 import logging
 log = logging.getLogger("blivet")
 
@@ -692,8 +692,8 @@ def _postDestroy(self):
             # self.exists has been unset, so don't use self.status
             if os.path.exists(self.path):
                 try:
-                    dm.dm_remove(self.name)
-                except (errors.DMError, OSError):
+                    blockdev.dm_remove(self.name)
+                except GLib.GError:
                     pass
 
     def _getSize(self):
diff --git a/blivet/devicetree.py b/blivet/devicetree.py
index 76cc7d4..6b84fb9 100644
--- a/blivet/devicetree.py
+++ b/blivet/devicetree.py
@@ -45,7 +45,6 @@
 from . import formats
 from .formats import getFormat
 from .formats.fs import nodev_filesystems
-from .devicelibs import dm
 from .devicelibs import lvm
 from .devicelibs import edd
 from . import udev
@@ -734,7 +733,7 @@ def addUdevDMDevice(self, info):
             for slave_name in slave_names:
                 # if it's a dm-X name, resolve it to a map name first
                 if slave_name.startswith("dm-"):
-                    dev_name = dm.name_from_dm_node(slave_name)
+                    dev_name = blockdev.dm_name_from_node(slave_name)
                 else:
                     dev_name = slave_name.replace("!", "/") # handles cciss
                 slave_dev = self.getDeviceByName(dev_name)
@@ -804,7 +803,7 @@ def addUdevMultiPathDevice(self, info):
         for slave_name in slave_names:
             # if it's a dm-X name, resolve it to a map name first
             if slave_name.startswith("dm-"):
-                dev_name = dm.name_from_dm_node(slave_name)
+                dev_name = blockdev.dm_name_from_node(slave_name)
             else:
                 dev_name = slave_name.replace("!", "/") # handles cciss
             slave_dev = self.getDeviceByName(dev_name)
@@ -847,7 +846,7 @@ def addUdevMDDevice(self, info):
         for slave_name in slave_names:
             # if it's a dm-X name, resolve it to a map name
             if slave_name.startswith("dm-"):
-                dev_name = dm.name_from_dm_node(slave_name)
+                dev_name = blockdev.dm_name_from_node(slave_name)
             else:
                 dev_name = slave_name
             slave_dev = self.getDeviceByName(dev_name)
@@ -2552,7 +2551,7 @@ def resolveDevice(self, devspec, blkidTab=None, cryptTab=None, options=None):
 
                 if devspec.startswith("/dev/dm-"):
                     try:
-                        dm_name = dm.name_from_dm_node(devspec[5:])
+                        dm_name = blockdev.dm_name_from_node(devspec[5:])
                     except StorageError as e:
                         log.info("failed to resolve %s: %s", devspec, e)
                         dm_name = None
diff --git a/blivet/formats/__init__.py b/blivet/formats/__init__.py
index e1f0b53..15180d7 100644
--- a/blivet/formats/__init__.py
+++ b/blivet/formats/__init__.py
@@ -30,8 +30,7 @@
 from ..util import run_program
 from ..util import ObjectID
 from ..storage_log import log_method_call
-from ..errors import DeviceFormatError, DMError, FormatCreateError, FormatDestroyError, FormatSetupError
-from ..devicelibs.dm import dm_node_from_name
+from ..errors import DeviceFormatError, FormatCreateError, FormatDestroyError, FormatSetupError
 from ..i18n import N_
 from ..size import Size
 
@@ -333,8 +332,8 @@ def notifyKernel(self):
 
         if self.device.startswith("/dev/mapper/"):
             try:
-                name = dm_node_from_name(os.path.basename(self.device))
-            except DMError:
+                name = blockdev.dm_node_from_name(os.path.basename(self.device))
+            except GLib.GError:
                 log.warning("failed to get dm node for %s", self.device)
                 return
         elif self.device.startswith("/dev/md/"):
diff --git a/blivet/osinstall.py b/blivet/osinstall.py
index 02dca1e..b5f3468 100644
--- a/blivet/osinstall.py
+++ b/blivet/osinstall.py
@@ -33,7 +33,6 @@
 from .devices import FileDevice, NFSDevice, NoDevice, OpticalDevice, NetworkStorageDevice, DirectoryDevice
 from .errors import FSTabTypeMismatchError, UnrecognizedFSTabEntryError, StorageError, FSResizeError, UnknownSourceDeviceError
 from .formats import get_device_format_class
-from .devicelibs.dm import name_from_dm_node
 from .formats import getFormat
 from .flags import flags
 from .platform import platform as _platform
@@ -1036,7 +1035,7 @@ def get_containing_device(path, devicetree):
 
     if device_name.startswith("dm-"):
         # have I told you lately that I love you, device-mapper?
-        device_name = name_from_dm_node(device_name)
+        device_name = blockdev.dm_name_from_node(device_name)
 
     return devicetree.getDeviceByName(device_name)
 


-- 
To view this commit on github, visit https://github.com/rhinstaller/blivet/commit/75accb312b14cb543df7c417975c3d2254940988


More information about the anaconda-patches mailing list