forked from rpms/python-blivet
		
	Use bcond for with python3, allow it on RHEL > 7 (mhroncok)
Conditionalize the Python 2 subpackage and don't build it on EL > 7 and Fedora > 28 (mhroncok) Add experimental support for NVDIMM. (vtrefny)
This commit is contained in:
		
							parent
							
								
									7be317fbf7
								
							
						
					
					
						commit
						b04db7f630
					
				
							
								
								
									
										28
									
								
								0001-Add-NVDIMM-plugin-to-list-of-requested-plugins.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								0001-Add-NVDIMM-plugin-to-list-of-requested-plugins.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,28 @@ | |||||||
|  | From ce4a0b07d77c81c066e05c7585fa436cfc4007bf Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Vojtech Trefny <vtrefny@redhat.com> | ||||||
|  | Date: Wed, 7 Feb 2018 14:35:26 +0100 | ||||||
|  | Subject: [PATCH 1/7] Add NVDIMM plugin to list of requested plugins | ||||||
|  | 
 | ||||||
|  | ---
 | ||||||
|  |  blivet/__init__.py | 4 ++-- | ||||||
|  |  1 file changed, 2 insertions(+), 2 deletions(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/blivet/__init__.py b/blivet/__init__.py
 | ||||||
|  | index 38492368..a86ce8c4 100644
 | ||||||
|  | --- a/blivet/__init__.py
 | ||||||
|  | +++ b/blivet/__init__.py
 | ||||||
|  | @@ -51,9 +51,9 @@ gi.require_version("BlockDev", "2.0")
 | ||||||
|  |  from gi.repository import GLib | ||||||
|  |  from gi.repository import BlockDev as blockdev | ||||||
|  |  if arch.is_s390(): | ||||||
|  | -    _REQUESTED_PLUGIN_NAMES = set(("lvm", "btrfs", "swap", "crypto", "loop", "mdraid", "mpath", "dm", "s390"))
 | ||||||
|  | +    _REQUESTED_PLUGIN_NAMES = set(("lvm", "btrfs", "swap", "crypto", "loop", "mdraid", "mpath", "dm", "s390", "nvdimm"))
 | ||||||
|  |  else: | ||||||
|  | -    _REQUESTED_PLUGIN_NAMES = set(("lvm", "btrfs", "swap", "crypto", "loop", "mdraid", "mpath", "dm"))
 | ||||||
|  | +    _REQUESTED_PLUGIN_NAMES = set(("lvm", "btrfs", "swap", "crypto", "loop", "mdraid", "mpath", "dm", "nvdimm"))
 | ||||||
|  |   | ||||||
|  |  _requested_plugins = blockdev.plugin_specs_from_names(_REQUESTED_PLUGIN_NAMES) | ||||||
|  |  try: | ||||||
|  | -- 
 | ||||||
|  | 2.14.3 | ||||||
|  | 
 | ||||||
							
								
								
									
										183
									
								
								0002-Add-a-singleton-for-NVDIMM-namespaces-management.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										183
									
								
								0002-Add-a-singleton-for-NVDIMM-namespaces-management.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,183 @@ | |||||||
|  | From 037d12cf3d137e08cbb8fa698a1a9c50d20228ea Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Vojtech Trefny <vtrefny@redhat.com> | ||||||
|  | Date: Wed, 7 Feb 2018 14:54:40 +0100 | ||||||
|  | Subject: [PATCH 2/7] Add a singleton for NVDIMM namespaces management | ||||||
|  | 
 | ||||||
|  | This currently allows changing mode of the namespace and getting | ||||||
|  | information about available namespaces. | ||||||
|  | ---
 | ||||||
|  |  blivet/static_data/__init__.py |   1 + | ||||||
|  |  blivet/static_data/nvdimm.py   | 152 +++++++++++++++++++++++++++++++++++++++++ | ||||||
|  |  2 files changed, 153 insertions(+) | ||||||
|  |  create mode 100644 blivet/static_data/nvdimm.py | ||||||
|  | 
 | ||||||
|  | diff --git a/blivet/static_data/__init__.py b/blivet/static_data/__init__.py
 | ||||||
|  | index 2c720af3..c5928ab4 100644
 | ||||||
|  | --- a/blivet/static_data/__init__.py
 | ||||||
|  | +++ b/blivet/static_data/__init__.py
 | ||||||
|  | @@ -1,3 +1,4 @@
 | ||||||
|  |  from .lvm_info import lvs_info, pvs_info | ||||||
|  |  from .luks_data import luks_data | ||||||
|  |  from .mpath_info import mpath_members | ||||||
|  | +from .nvdimm import nvdimm
 | ||||||
|  | diff --git a/blivet/static_data/nvdimm.py b/blivet/static_data/nvdimm.py
 | ||||||
|  | new file mode 100644 | ||||||
|  | index 00000000..0644c9f6
 | ||||||
|  | --- /dev/null
 | ||||||
|  | +++ b/blivet/static_data/nvdimm.py
 | ||||||
|  | @@ -0,0 +1,152 @@
 | ||||||
|  | +#
 | ||||||
|  | +# nvdimm.py - nvdimm class
 | ||||||
|  | +#
 | ||||||
|  | +# Copyright (C) 2018  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/>.
 | ||||||
|  | +#
 | ||||||
|  | +
 | ||||||
|  | +import gi
 | ||||||
|  | +gi.require_version("BlockDev", "2.0")
 | ||||||
|  | +gi.require_version("GLib", "2.0")
 | ||||||
|  | +from gi.repository import BlockDev
 | ||||||
|  | +from gi.repository import GLib
 | ||||||
|  | +
 | ||||||
|  | +from .. import util
 | ||||||
|  | +
 | ||||||
|  | +import logging
 | ||||||
|  | +log = logging.getLogger("blivet")
 | ||||||
|  | +
 | ||||||
|  | +
 | ||||||
|  | +class NVDIMMDependencyGuard(util.DependencyGuard):
 | ||||||
|  | +    error_msg = "libblockdev NVDIMM functionality not available"
 | ||||||
|  | +
 | ||||||
|  | +    def _check_avail(self):
 | ||||||
|  | +        try:
 | ||||||
|  | +            BlockDev.nvdimm_is_tech_avail(BlockDev.NVDIMMTech.NVDIMM_TECH_NAMESPACE,
 | ||||||
|  | +                                          BlockDev.NVDIMMTechMode.RECONFIGURE |
 | ||||||
|  | +                                          BlockDev.NVDIMMTechMode.QUERY |
 | ||||||
|  | +                                          BlockDev.NVDIMMTechMode.ACTIVATE_DEACTIVATE)
 | ||||||
|  | +        except GLib.GError:
 | ||||||
|  | +            return False
 | ||||||
|  | +        return True
 | ||||||
|  | +
 | ||||||
|  | +blockdev_nvdimm_required = NVDIMMDependencyGuard()
 | ||||||
|  | +
 | ||||||
|  | +
 | ||||||
|  | +class NVDIMM(object):
 | ||||||
|  | +    """ NVDIMM utility class.
 | ||||||
|  | +
 | ||||||
|  | +        .. warning::
 | ||||||
|  | +            Since this is a singleton class, calling deepcopy() on the instance
 | ||||||
|  | +            just returns ``self`` with no copy being created.
 | ||||||
|  | +    """
 | ||||||
|  | +
 | ||||||
|  | +    def __init__(self):
 | ||||||
|  | +        self._namespaces = None
 | ||||||
|  | +
 | ||||||
|  | +    # So that users can write nvdimm() to get the singleton instance
 | ||||||
|  | +    def __call__(self):
 | ||||||
|  | +        return self
 | ||||||
|  | +
 | ||||||
|  | +    def __deepcopy__(self, memo_dict):
 | ||||||
|  | +        # pylint: disable=unused-argument
 | ||||||
|  | +        return self
 | ||||||
|  | +
 | ||||||
|  | +    @property
 | ||||||
|  | +    def namespaces(self):
 | ||||||
|  | +        """ Dict of all NVDIMM namespaces, including dax and disabled namespaces
 | ||||||
|  | +        """
 | ||||||
|  | +        if not self._namespaces:
 | ||||||
|  | +            self.update_namespaces_info()
 | ||||||
|  | +
 | ||||||
|  | +        return self._namespaces
 | ||||||
|  | +
 | ||||||
|  | +    @blockdev_nvdimm_required(critical=True, eval_mode=util.EvalMode.onetime)
 | ||||||
|  | +    def update_namespaces_info(self):
 | ||||||
|  | +        """ Update information about the namespaces
 | ||||||
|  | +        """
 | ||||||
|  | +        namespaces = BlockDev.nvdimm_list_namespaces(idle=True)
 | ||||||
|  | +
 | ||||||
|  | +        self._namespaces = dict((namespace.dev, namespace) for namespace in namespaces)
 | ||||||
|  | +
 | ||||||
|  | +    def get_namespace_info(self, device):
 | ||||||
|  | +        """ Get namespace information for a device
 | ||||||
|  | +            :param str device: device name (e.g. 'pmem0') or path
 | ||||||
|  | +        """
 | ||||||
|  | +        for info in self.namespaces.values():
 | ||||||
|  | +            if info.blockdev == device or \
 | ||||||
|  | +               (device.startswith("/dev/") and info.blockdev == device[5:]):
 | ||||||
|  | +                return info
 | ||||||
|  | +
 | ||||||
|  | +    @blockdev_nvdimm_required(critical=True, eval_mode=util.EvalMode.onetime)
 | ||||||
|  | +    def enable_namespace(self, namespace):
 | ||||||
|  | +        """ Enable a namespace
 | ||||||
|  | +            :param str namespace: devname of the namespace (e.g. 'namespace0.0')
 | ||||||
|  | +        """
 | ||||||
|  | +
 | ||||||
|  | +        if namespace not in self.namespaces.keys():
 | ||||||
|  | +            raise ValueError("Namespace '%s' doesn't exist." % namespace)
 | ||||||
|  | +
 | ||||||
|  | +        BlockDev.nvdimm_namespace_enable(namespace)
 | ||||||
|  | +
 | ||||||
|  | +        # and update our namespaces info "cache"
 | ||||||
|  | +        self.update_namespaces_info()
 | ||||||
|  | +
 | ||||||
|  | +    @blockdev_nvdimm_required(critical=True, eval_mode=util.EvalMode.onetime)
 | ||||||
|  | +    def reconfigure_namespace(self, namespace, mode, **kwargs):
 | ||||||
|  | +        """ Change mode of the namespace
 | ||||||
|  | +            :param str namespace: devname of the namespace (e.g. 'namespace0.0')
 | ||||||
|  | +            :param str mode: new mode of the namespace (one of 'sector', 'memory', 'dax')
 | ||||||
|  | +            :keyword int sector_size: sector size when reconfiguring to the 'sector' mode
 | ||||||
|  | +            :keyword str map_location: map location when reconfiguring to the 'memory'
 | ||||||
|  | +                                       mode (one of 'mem', 'dev')
 | ||||||
|  | +
 | ||||||
|  | +            .. note::
 | ||||||
|  | +                This doesn't change state of the devicetree. It is necessary to
 | ||||||
|  | +                run reset() or populate() to make these changes visible.
 | ||||||
|  | +        """
 | ||||||
|  | +
 | ||||||
|  | +        if namespace not in self.namespaces.keys():
 | ||||||
|  | +            raise ValueError("Namespace '%s' doesn't exist." % namespace)
 | ||||||
|  | +
 | ||||||
|  | +        info = self.namespaces[namespace]
 | ||||||
|  | +
 | ||||||
|  | +        sector_size = kwargs.get("sector_size", None)
 | ||||||
|  | +        map_location = kwargs.get("map_location", None)
 | ||||||
|  | +
 | ||||||
|  | +        if sector_size and mode != "sector":
 | ||||||
|  | +            raise ValueError("Sector size cannot be set for selected mode '%s'." % mode)
 | ||||||
|  | +
 | ||||||
|  | +        if map_location and mode != "memory":
 | ||||||
|  | +            raise ValueError("Map location cannot be set for selected mode '%s'." % mode)
 | ||||||
|  | +
 | ||||||
|  | +        mode_t = BlockDev.nvdimm_namespace_get_mode_from_str(mode)
 | ||||||
|  | +
 | ||||||
|  | +        if sector_size:
 | ||||||
|  | +            extra = {"-l": str(sector_size)}
 | ||||||
|  | +        elif map_location:
 | ||||||
|  | +            extra = {"-M": map_location}
 | ||||||
|  | +        else:
 | ||||||
|  | +            extra = None
 | ||||||
|  | +
 | ||||||
|  | +        BlockDev.nvdimm_namespace_reconfigure(namespace, mode_t, info.enabled, extra)
 | ||||||
|  | +
 | ||||||
|  | +        # and update our namespaces info "cache"
 | ||||||
|  | +        self.update_namespaces_info()
 | ||||||
|  | +
 | ||||||
|  | +
 | ||||||
|  | +# Create nvdimm singleton
 | ||||||
|  | +nvdimm = NVDIMM()
 | ||||||
|  | +""" An instance of :class:`NVDIMM` """
 | ||||||
|  | -- 
 | ||||||
|  | 2.14.3 | ||||||
|  | 
 | ||||||
							
								
								
									
										29
									
								
								0003-Add-a-function-for-identifying-NVDIMM-namespaces.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								0003-Add-a-function-for-identifying-NVDIMM-namespaces.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,29 @@ | |||||||
|  | From a14bf252c554c026215a69851c8649f705edaa5d Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Vojtech Trefny <vtrefny@redhat.com> | ||||||
|  | Date: Wed, 7 Feb 2018 14:56:13 +0100 | ||||||
|  | Subject: [PATCH 3/7] Add a function for identifying NVDIMM namespaces | ||||||
|  | 
 | ||||||
|  | ---
 | ||||||
|  |  blivet/udev.py | 9 +++++++++ | ||||||
|  |  1 file changed, 9 insertions(+) | ||||||
|  | 
 | ||||||
|  | diff --git a/blivet/udev.py b/blivet/udev.py
 | ||||||
|  | index 6936a230..69e12357 100644
 | ||||||
|  | --- a/blivet/udev.py
 | ||||||
|  | +++ b/blivet/udev.py
 | ||||||
|  | @@ -914,3 +914,12 @@ def device_get_fcoe_identifier(info):
 | ||||||
|  |      if device_is_fcoe(info) and len(path_components) >= 4 and \ | ||||||
|  |         path_components[2] == 'fc': | ||||||
|  |          return path_components[3] | ||||||
|  | +
 | ||||||
|  | +
 | ||||||
|  | +def device_is_nvdimm_namespace(info):
 | ||||||
|  | +    if info.get("DEVTYPE") != "disk":
 | ||||||
|  | +        return False
 | ||||||
|  | +
 | ||||||
|  | +    devname = info.get("DEVNAME", "")
 | ||||||
|  | +    ninfo = blockdev.nvdimm_namespace_get_devname(devname)
 | ||||||
|  | +    return ninfo is not None
 | ||||||
|  | -- 
 | ||||||
|  | 2.14.3 | ||||||
|  | 
 | ||||||
							
								
								
									
										100
									
								
								0004-Add-NVDIMMNamespaceDevice-device-representing-NVDIMM.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								0004-Add-NVDIMMNamespaceDevice-device-representing-NVDIMM.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,100 @@ | |||||||
|  | From 6ae475fb80cdf1dd7f527ed0b952c613a5825ec3 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Vojtech Trefny <vtrefny@redhat.com> | ||||||
|  | Date: Wed, 7 Feb 2018 14:58:12 +0100 | ||||||
|  | Subject: [PATCH 4/7] Add 'NVDIMMNamespaceDevice' device representing NVDIMM | ||||||
|  |  namespaces | ||||||
|  | 
 | ||||||
|  | ---
 | ||||||
|  |  blivet/devices/__init__.py |  2 +- | ||||||
|  |  blivet/devices/disk.py     | 51 ++++++++++++++++++++++++++++++++++++++++++++-- | ||||||
|  |  2 files changed, 50 insertions(+), 3 deletions(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/blivet/devices/__init__.py b/blivet/devices/__init__.py
 | ||||||
|  | index 5bae1cbe..aaad30c3 100644
 | ||||||
|  | --- a/blivet/devices/__init__.py
 | ||||||
|  | +++ b/blivet/devices/__init__.py
 | ||||||
|  | @@ -22,7 +22,7 @@
 | ||||||
|  |  from .lib import device_path_to_name, device_name_to_disk_by_path, ParentList | ||||||
|  |  from .device import Device | ||||||
|  |  from .storage import StorageDevice | ||||||
|  | -from .disk import DiskDevice, DiskFile, DMRaidArrayDevice, MultipathDevice, iScsiDiskDevice, FcoeDiskDevice, DASDDevice, ZFCPDiskDevice
 | ||||||
|  | +from .disk import DiskDevice, DiskFile, DMRaidArrayDevice, MultipathDevice, iScsiDiskDevice, FcoeDiskDevice, DASDDevice, ZFCPDiskDevice, NVDIMMNamespaceDevice
 | ||||||
|  |  from .partition import PartitionDevice | ||||||
|  |  from .dm import DMDevice, DMLinearDevice, DMCryptDevice, DM_MAJORS | ||||||
|  |  from .luks import LUKSDevice | ||||||
|  | diff --git a/blivet/devices/disk.py b/blivet/devices/disk.py
 | ||||||
|  | index 26448640..dc796cf0 100644
 | ||||||
|  | --- a/blivet/devices/disk.py
 | ||||||
|  | +++ b/blivet/devices/disk.py
 | ||||||
|  | @@ -63,7 +63,7 @@ class DiskDevice(StorageDevice):
 | ||||||
|  |      def __init__(self, name, fmt=None, | ||||||
|  |                   size=None, major=None, minor=None, sysfs_path='', | ||||||
|  |                   parents=None, serial=None, vendor="", model="", bus="", wwn=None, | ||||||
|  | -                 exists=True):
 | ||||||
|  | +                 uuid=None, exists=True):
 | ||||||
|  |          """ | ||||||
|  |              :param name: the device name (generally a device node's basename) | ||||||
|  |              :type name: str | ||||||
|  | @@ -96,7 +96,7 @@ class DiskDevice(StorageDevice):
 | ||||||
|  |                                 major=major, minor=minor, exists=exists, | ||||||
|  |                                 sysfs_path=sysfs_path, parents=parents, | ||||||
|  |                                 serial=serial, model=model, | ||||||
|  | -                               vendor=vendor, bus=bus)
 | ||||||
|  | +                               vendor=vendor, bus=bus, uuid=uuid)
 | ||||||
|  |   | ||||||
|  |          self.wwn = wwn or None | ||||||
|  |   | ||||||
|  | @@ -660,3 +660,50 @@ class DASDDevice(DiskDevice):
 | ||||||
|  |                                              ":".join(opts))]) | ||||||
|  |          else: | ||||||
|  |              return set(["rd.dasd=%s" % self.busid]) | ||||||
|  | +
 | ||||||
|  | +
 | ||||||
|  | +class NVDIMMNamespaceDevice(DiskDevice):
 | ||||||
|  | +
 | ||||||
|  | +    """ Non-volatile memory namespace """
 | ||||||
|  | +    _type = "nvdimm"
 | ||||||
|  | +
 | ||||||
|  | +    def __init__(self, device, **kwargs):
 | ||||||
|  | +        """
 | ||||||
|  | +            :param name: the device name (generally a device node's basename)
 | ||||||
|  | +            :type name: str
 | ||||||
|  | +            :keyword exists: does this device exist?
 | ||||||
|  | +            :type exists: bool
 | ||||||
|  | +            :keyword size: the device's size
 | ||||||
|  | +            :type size: :class:`~.size.Size`
 | ||||||
|  | +            :keyword parents: a list of parent devices
 | ||||||
|  | +            :type parents: list of :class:`StorageDevice`
 | ||||||
|  | +            :keyword format: this device's formatting
 | ||||||
|  | +            :type format: :class:`~.formats.DeviceFormat` or a subclass of it
 | ||||||
|  | +            :keyword mode: mode of the namespace
 | ||||||
|  | +            :type mode: str
 | ||||||
|  | +            :keyword devname: name of the namespace (e.g. 'namespace0.0')
 | ||||||
|  | +            :type devname: str
 | ||||||
|  | +            :keyword sector_size: sector size of the namespace in sector mode
 | ||||||
|  | +            :type sector_size: str
 | ||||||
|  | +        """
 | ||||||
|  | +        self.mode = kwargs.pop("mode")
 | ||||||
|  | +        self.devname = kwargs.pop("devname")
 | ||||||
|  | +        self.sector_size = kwargs.pop("sector_size")
 | ||||||
|  | +
 | ||||||
|  | +        DiskDevice.__init__(self, device, **kwargs)
 | ||||||
|  | +
 | ||||||
|  | +    def __repr__(self):
 | ||||||
|  | +        s = DiskDevice.__repr__(self)
 | ||||||
|  | +        s += ("  mode = %(mode)s  devname = %(devname)s" %
 | ||||||
|  | +              {"mode": self.mode,
 | ||||||
|  | +               "devname": self.devname})
 | ||||||
|  | +        if self.sector_size:
 | ||||||
|  | +            s += ("  sector size = %(sector_size)s" % {"sector_size": self.sector_size})
 | ||||||
|  | +        return s
 | ||||||
|  | +
 | ||||||
|  | +    @property
 | ||||||
|  | +    def description(self):
 | ||||||
|  | +        return "NVDIMM namespace %(devname)s in %(mode)s mode exported as %(path)s" \
 | ||||||
|  | +               % {'devname': self.devname,
 | ||||||
|  | +                  'mode': self.mode,
 | ||||||
|  | +                  'path': self.path}
 | ||||||
|  | -- 
 | ||||||
|  | 2.14.3 | ||||||
|  | 
 | ||||||
							
								
								
									
										69
									
								
								0005-Add-populator-helper-for-NVDIMM-namespaces.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								0005-Add-populator-helper-for-NVDIMM-namespaces.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,69 @@ | |||||||
|  | From 5251f696f0bd8a68efde2df7c4dc948c4494ac60 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Vojtech Trefny <vtrefny@redhat.com> | ||||||
|  | Date: Wed, 7 Feb 2018 15:00:25 +0100 | ||||||
|  | Subject: [PATCH 5/7] Add populator helper for NVDIMM namespaces | ||||||
|  | 
 | ||||||
|  | Helper for adding block-like NVDIMM namespaces to the devicetree. | ||||||
|  | ---
 | ||||||
|  |  blivet/populator/helpers/__init__.py |  2 +- | ||||||
|  |  blivet/populator/helpers/disk.py     | 27 ++++++++++++++++++++++++++- | ||||||
|  |  2 files changed, 27 insertions(+), 2 deletions(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/blivet/populator/helpers/__init__.py b/blivet/populator/helpers/__init__.py
 | ||||||
|  | index 861426c6..dd23475a 100644
 | ||||||
|  | --- a/blivet/populator/helpers/__init__.py
 | ||||||
|  | +++ b/blivet/populator/helpers/__init__.py
 | ||||||
|  | @@ -6,7 +6,7 @@ from .formatpopulator import FormatPopulator
 | ||||||
|  |   | ||||||
|  |  from .btrfs import BTRFSFormatPopulator | ||||||
|  |  from .boot import AppleBootFormatPopulator, EFIFormatPopulator, MacEFIFormatPopulator | ||||||
|  | -from .disk import DiskDevicePopulator, iScsiDevicePopulator, FCoEDevicePopulator, MDBiosRaidDevicePopulator, DASDDevicePopulator, ZFCPDevicePopulator
 | ||||||
|  | +from .disk import DiskDevicePopulator, iScsiDevicePopulator, FCoEDevicePopulator, MDBiosRaidDevicePopulator, DASDDevicePopulator, ZFCPDevicePopulator, NVDIMMNamespaceDevicePopulator
 | ||||||
|  |  from .disklabel import DiskLabelFormatPopulator | ||||||
|  |  from .dm import DMDevicePopulator | ||||||
|  |  from .dmraid import DMRaidFormatPopulator | ||||||
|  | diff --git a/blivet/populator/helpers/disk.py b/blivet/populator/helpers/disk.py
 | ||||||
|  | index e2757b12..ae4a7d28 100644
 | ||||||
|  | --- a/blivet/populator/helpers/disk.py
 | ||||||
|  | +++ b/blivet/populator/helpers/disk.py
 | ||||||
|  | @@ -28,7 +28,7 @@ from gi.repository import BlockDev as blockdev
 | ||||||
|  |  from ... import udev | ||||||
|  |  from ... import util | ||||||
|  |  from ...devices import DASDDevice, DiskDevice, FcoeDiskDevice, iScsiDiskDevice | ||||||
|  | -from ...devices import MDBiosRaidArrayDevice, ZFCPDiskDevice
 | ||||||
|  | +from ...devices import MDBiosRaidArrayDevice, ZFCPDiskDevice, NVDIMMNamespaceDevice
 | ||||||
|  |  from ...devices import device_path_to_name | ||||||
|  |  from ...storage_log import log_method_call | ||||||
|  |  from .devicepopulator import DevicePopulator | ||||||
|  | @@ -214,3 +214,28 @@ class ZFCPDevicePopulator(DiskDevicePopulator):
 | ||||||
|  |   | ||||||
|  |          log.info("%s is a zfcp device", udev.device_get_name(self.data)) | ||||||
|  |          return kwargs | ||||||
|  | +
 | ||||||
|  | +
 | ||||||
|  | +class NVDIMMNamespaceDevicePopulator(DiskDevicePopulator):
 | ||||||
|  | +    priority = 20
 | ||||||
|  | +
 | ||||||
|  | +    _device_class = NVDIMMNamespaceDevice
 | ||||||
|  | +
 | ||||||
|  | +    @classmethod
 | ||||||
|  | +    def match(cls, data):
 | ||||||
|  | +        return (super(NVDIMMNamespaceDevicePopulator, NVDIMMNamespaceDevicePopulator).match(data) and
 | ||||||
|  | +                udev.device_is_nvdimm_namespace(data))
 | ||||||
|  | +
 | ||||||
|  | +    def _get_kwargs(self):
 | ||||||
|  | +        kwargs = super(NVDIMMNamespaceDevicePopulator, self)._get_kwargs()
 | ||||||
|  | +
 | ||||||
|  | +        from ...static_data import nvdimm
 | ||||||
|  | +        ninfo = nvdimm.get_namespace_info(self.data.get("DEVNAME"))
 | ||||||
|  | +
 | ||||||
|  | +        kwargs["mode"] = blockdev.nvdimm_namespace_get_mode_str(ninfo.mode)
 | ||||||
|  | +        kwargs["devname"] = ninfo.dev
 | ||||||
|  | +        kwargs["uuid"] = ninfo.uuid
 | ||||||
|  | +        kwargs["sector_size"] = ninfo.sector_size
 | ||||||
|  | +
 | ||||||
|  | +        log.info("%s is an NVDIMM namespace device", udev.device_get_name(self.data))
 | ||||||
|  | +        return kwargs
 | ||||||
|  | -- 
 | ||||||
|  | 2.14.3 | ||||||
|  | 
 | ||||||
							
								
								
									
										40
									
								
								0007-Add-nvdimm-tag-for-NVDIMM-namespaces.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								0007-Add-nvdimm-tag-for-NVDIMM-namespaces.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,40 @@ | |||||||
|  | From d4792dd0d2824eedbcf8cd8d28434ed8f6e938dc Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Vojtech Trefny <vtrefny@redhat.com> | ||||||
|  | Date: Tue, 13 Mar 2018 14:46:32 +0100 | ||||||
|  | Subject: [PATCH 7/7] Add 'nvdimm' tag for NVDIMM namespaces | ||||||
|  | 
 | ||||||
|  | ---
 | ||||||
|  |  blivet/devices/disk.py | 4 ++++ | ||||||
|  |  blivet/devices/lib.py  | 1 + | ||||||
|  |  2 files changed, 5 insertions(+) | ||||||
|  | 
 | ||||||
|  | diff --git a/blivet/devices/disk.py b/blivet/devices/disk.py
 | ||||||
|  | index dc796cf0..9021126c 100644
 | ||||||
|  | --- a/blivet/devices/disk.py
 | ||||||
|  | +++ b/blivet/devices/disk.py
 | ||||||
|  | @@ -692,6 +692,10 @@ class NVDIMMNamespaceDevice(DiskDevice):
 | ||||||
|  |   | ||||||
|  |          DiskDevice.__init__(self, device, **kwargs) | ||||||
|  |   | ||||||
|  | +        self._clear_local_tags()
 | ||||||
|  | +        self.tags.add(Tags.local)
 | ||||||
|  | +        self.tags.add(Tags.nvdimm)
 | ||||||
|  | +
 | ||||||
|  |      def __repr__(self): | ||||||
|  |          s = DiskDevice.__repr__(self) | ||||||
|  |          s += ("  mode = %(mode)s  devname = %(devname)s" % | ||||||
|  | diff --git a/blivet/devices/lib.py b/blivet/devices/lib.py
 | ||||||
|  | index 70b769a4..021f2cfd 100644
 | ||||||
|  | --- a/blivet/devices/lib.py
 | ||||||
|  | +++ b/blivet/devices/lib.py
 | ||||||
|  | @@ -31,6 +31,7 @@ LINUX_SECTOR_SIZE = Size(512)
 | ||||||
|  |  class Tags(str, Enum): | ||||||
|  |      """Tags that describe various classes of disk.""" | ||||||
|  |      local = 'local' | ||||||
|  | +    nvdimm = 'nvdimm'
 | ||||||
|  |      remote = 'remote' | ||||||
|  |      removable = 'removable' | ||||||
|  |      ssd = 'ssd' | ||||||
|  | -- 
 | ||||||
|  | 2.14.3 | ||||||
|  | 
 | ||||||
| @ -1,10 +1,19 @@ | |||||||
| %define is_rhel 0%{?rhel} != 0 | %define is_rhel 0%{?rhel} != 0 | ||||||
| 
 | 
 | ||||||
| # python3 is not available on RHEL | # python3 is not available on RHEL <=7 | ||||||
| %if %{is_rhel} | %if %{is_rhel} && 0%{?rhel} <= 7 | ||||||
| %define with_python3 0 | # disable python3 by default | ||||||
|  | %bcond_with python3 | ||||||
| %else | %else | ||||||
| %define with_python3 1 | %bcond_without python3 | ||||||
|  | %endif | ||||||
|  | 
 | ||||||
|  | # python2 is not available on RHEL > 7 and not needed on Fedora > 28 | ||||||
|  | %if 0%{?rhel} > 7 || 0%{?fedora} > 28 | ||||||
|  | # disable python2 by default | ||||||
|  | %bcond_with python2 | ||||||
|  | %else | ||||||
|  | %bcond_without python2 | ||||||
| %endif | %endif | ||||||
| 
 | 
 | ||||||
| Summary:  A python module for system storage configuration | Summary:  A python module for system storage configuration | ||||||
| @ -14,7 +23,7 @@ Version: 3.0.0 | |||||||
| 
 | 
 | ||||||
| %global prerelease .b1 | %global prerelease .b1 | ||||||
| # prerelease, if defined, should be something like .a1, .b1, .b2.dev1, or .c2 | # prerelease, if defined, should be something like .a1, .b1, .b2.dev1, or .c2 | ||||||
| Release: 0.6%{?prerelease}%{?dist} | Release: 0.7%{?prerelease}%{?dist} | ||||||
| Epoch: 1 | Epoch: 1 | ||||||
| License: LGPLv2+ | License: LGPLv2+ | ||||||
| Group: System Environment/Libraries | Group: System Environment/Libraries | ||||||
| @ -26,6 +35,13 @@ Patch1: 0002-Do-not-try-to-update-potfile-during-make-all.patch | |||||||
| Patch2: 0003-Allow-device-specification-by-node-to-udev.get_devic.patch | Patch2: 0003-Allow-device-specification-by-node-to-udev.get_devic.patch | ||||||
| Patch3: 0004-Don-t-use-a-wwn-kwarg-for-MDBiosRaidArrayDevice-1557.patch | Patch3: 0004-Don-t-use-a-wwn-kwarg-for-MDBiosRaidArrayDevice-1557.patch | ||||||
| 
 | 
 | ||||||
|  | Patch4: 0001-Add-NVDIMM-plugin-to-list-of-requested-plugins.patch | ||||||
|  | Patch5: 0002-Add-a-singleton-for-NVDIMM-namespaces-management.patch | ||||||
|  | Patch6: 0003-Add-a-function-for-identifying-NVDIMM-namespaces.patch | ||||||
|  | Patch7: 0004-Add-NVDIMMNamespaceDevice-device-representing-NVDIMM.patch | ||||||
|  | Patch8: 0005-Add-populator-helper-for-NVDIMM-namespaces.patch | ||||||
|  | Patch10: 0007-Add-nvdimm-tag-for-NVDIMM-namespaces.patch | ||||||
|  | 
 | ||||||
| # Versions of required components (done so we make sure the buildrequires | # Versions of required components (done so we make sure the buildrequires | ||||||
| # match the requires versions of things). | # match the requires versions of things). | ||||||
| %global partedver 1.8.1 | %global partedver 1.8.1 | ||||||
| @ -53,7 +69,7 @@ Conflicts: python3-blivet < 1:2.0.0 | |||||||
| The %{realname}-data package provides data files required by the %{realname} | The %{realname}-data package provides data files required by the %{realname} | ||||||
| python module. | python module. | ||||||
| 
 | 
 | ||||||
| %if %{with_python3} | %if %{with python3} | ||||||
| %package -n python3-%{realname} | %package -n python3-%{realname} | ||||||
| Summary: A python3 package for examining and modifying storage configuration. | Summary: A python3 package for examining and modifying storage configuration. | ||||||
| 
 | 
 | ||||||
| @ -79,13 +95,20 @@ Requires: systemd-udev | |||||||
| Requires: %{realname}-data = %{epoch}:%{version}-%{release} | Requires: %{realname}-data = %{epoch}:%{version}-%{release} | ||||||
| 
 | 
 | ||||||
| Obsoletes: blivet-data < 1:2.0.0 | Obsoletes: blivet-data < 1:2.0.0 | ||||||
|  | 
 | ||||||
|  | %if %{without python2} | ||||||
|  | Obsoletes: python2-blivet < 1:3.0.0-0.6 | ||||||
|  | Obsoletes: python-blivet < 1:3.0.0-0.6 | ||||||
|  | %else | ||||||
| Obsoletes: python-blivet < 1:2.0.0 | Obsoletes: python-blivet < 1:2.0.0 | ||||||
|  | %endif | ||||||
| 
 | 
 | ||||||
| %description -n python3-%{realname} | %description -n python3-%{realname} | ||||||
| The python3-%{realname} is a python3 package for examining and modifying storage | The python3-%{realname} is a python3 package for examining and modifying storage | ||||||
| configuration. | configuration. | ||||||
| %endif | %endif | ||||||
| 
 | 
 | ||||||
|  | %if %{with python2} | ||||||
| %package -n python2-%{realname} | %package -n python2-%{realname} | ||||||
| Summary: A python2 package for examining and modifying storage configuration. | Summary: A python2 package for examining and modifying storage configuration. | ||||||
| 
 | 
 | ||||||
| @ -128,23 +151,18 @@ Obsoletes: python-blivet < 1:2.0.0 | |||||||
| %description -n python2-%{realname} | %description -n python2-%{realname} | ||||||
| The python2-%{realname} is a python2 package for examining and modifying storage | The python2-%{realname} is a python2 package for examining and modifying storage | ||||||
| configuration. | configuration. | ||||||
|  | %endif | ||||||
| 
 | 
 | ||||||
| %prep | %prep | ||||||
| %autosetup -n %{realname}-%{realversion} -p1 | %autosetup -n %{realname}-%{realversion} -p1 | ||||||
| 
 | 
 | ||||||
| %build | %build | ||||||
| make PYTHON=%{__python2} | %{?with_python2:make PYTHON=%{__python2}} | ||||||
| 
 | %{?with_python3:make PYTHON=%{__python3}} | ||||||
| %if %{with_python3} |  | ||||||
| make PYTHON=%{__python3} |  | ||||||
| %endif |  | ||||||
| 
 | 
 | ||||||
| %install | %install | ||||||
| make PYTHON=%{__python2} DESTDIR=%{buildroot} install | %{?with_python2:make PYTHON=%{__python2} DESTDIR=%{buildroot} install} | ||||||
| 
 | %{?with_python3:make PYTHON=%{__python3} DESTDIR=%{buildroot} install} | ||||||
| %if %{with_python3} |  | ||||||
| make PYTHON=%{__python3} DESTDIR=%{buildroot} install |  | ||||||
| %endif |  | ||||||
| 
 | 
 | ||||||
| %find_lang %{realname} | %find_lang %{realname} | ||||||
| 
 | 
 | ||||||
| @ -154,12 +172,14 @@ make PYTHON=%{__python3} DESTDIR=%{buildroot} install | |||||||
| %{_libexecdir}/* | %{_libexecdir}/* | ||||||
| %{_unitdir}/* | %{_unitdir}/* | ||||||
| 
 | 
 | ||||||
|  | %if %{with python2} | ||||||
| %files -n python2-%{realname} | %files -n python2-%{realname} | ||||||
| %license COPYING | %license COPYING | ||||||
| %doc README ChangeLog examples | %doc README ChangeLog examples | ||||||
| %{python2_sitelib}/* | %{python2_sitelib}/* | ||||||
|  | %endif | ||||||
| 
 | 
 | ||||||
| %if %{with_python3} | %if %{with python3} | ||||||
| %files -n python3-%{realname} | %files -n python3-%{realname} | ||||||
| %license COPYING | %license COPYING | ||||||
| %doc README ChangeLog examples | %doc README ChangeLog examples | ||||||
| @ -167,6 +187,11 @@ make PYTHON=%{__python3} DESTDIR=%{buildroot} install | |||||||
| %endif | %endif | ||||||
| 
 | 
 | ||||||
| %changelog | %changelog | ||||||
|  | * Mon Apr 02 2018 David Lehman <dlehman@redhat.com> - 1:3.0.0-0.7.b1 | ||||||
|  | - Use bcond for with python3, allow it on RHEL > 7 (mhroncok) | ||||||
|  | - Conditionalize the Python 2 subpackage and don't build it on EL > 7 and Fedora > 28 (mhroncok) | ||||||
|  | - Add experimental support for NVDIMM. (vtrefny) | ||||||
|  | 
 | ||||||
| * Tue Mar 20 2018 David Lehman <dlehman@redhat.com> - 1:3.0.0-0.6.b1 | * Tue Mar 20 2018 David Lehman <dlehman@redhat.com> - 1:3.0.0-0.6.b1 | ||||||
| - Don't use a 'wwn' kwarg for MDBiosRaidArrayDevice (#1557957) (awilliam) | - Don't use a 'wwn' kwarg for MDBiosRaidArrayDevice (#1557957) (awilliam) | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user