From 538875f5ef3a63c801e7ef356b14473e441bbe31 Mon Sep 17 00:00:00 2001 From: Steffen Maier Date: Wed, 10 May 2023 18:29:53 +0200 Subject: [PATCH] DASDDevice: dracut_setup_args() without deprecated dasd.conf (#1802482,#1937049) Implements the dasd part of referenced bugs. Depends on https://github.com/ibm-s390-linux/s390-tools commit ("zdev: add helper for DASD config conversion from zdev to dasd_mod.dasd"). Delegate the generation of rd.dasd statements to a helper tool from s390-tools, which gets its low-level config information from the consolidated persistent configuration mechanism using chzdev. Signed-off-by: Steffen Maier --- blivet/devices/disk.py | 56 +++----------------------------- blivet/populator/helpers/disk.py | 3 -- 2 files changed, 4 insertions(+), 55 deletions(-) diff --git a/blivet/devices/disk.py b/blivet/devices/disk.py index 676637543..d02a6e573 100644 --- a/blivet/devices/disk.py +++ b/blivet/devices/disk.py @@ -528,67 +528,19 @@ def __init__(self, device, **kwargs): :type format: :class:`~.formats.DeviceFormat` or a subclass of it :keyword str wwn: the disk's WWN :keyword busid: bus ID - :keyword opts: options - :type opts: dict with option name keys and option value values """ self.busid = kwargs.pop('busid') - self.opts = kwargs.pop('opts') DiskDevice.__init__(self, device, **kwargs) @property def description(self): return "DASD device %s" % self.busid - def get_opts(self): - return ["%s=%s" % (k, v) for k, v in self.opts.items() if v == '1'] - def dracut_setup_args(self): - conf = "/etc/dasd.conf" - line = None - if os.path.isfile(conf): - f = open(conf) - # grab the first line that starts with our bus_id - for l in f.readlines(): - if l.startswith(self.busid): - line = l.rstrip() - break - - f.close() - - # See if we got a line. If not, grab our get_opts - if not line: - line = self.busid - for devopt in self.get_opts(): - line += " %s" % devopt - - # Create a translation mapping from dasd.conf format to module format - translate = {'use_diag': 'diag', - 'readonly': 'ro', - 'erplog': 'erplog', - 'failfast': 'failfast'} - - # this is a really awkward way of determining if the - # feature found is actually desired (1, not 0), plus - # translating that feature into the actual kernel module - # value - opts = [] - parts = line.split() - for chunk in parts[1:]: - try: - feat, val = chunk.split('=') - if int(val): - opts.append(translate[feat]) - except (ValueError, KeyError): - # If we don't know what the feature is (feat not in translate - # or if we get a val that doesn't cleanly convert to an int - # we can't do anything with it. - log.warning("failed to parse dasd feature %s", chunk) - - if opts: - return set(["rd.dasd=%s(%s)" % (self.busid, - ":".join(opts))]) - else: - return set(["rd.dasd=%s" % self.busid]) + devspec = util.capture_output(["/lib/s390-tools/zdev-to-dasd_mod.dasd", + "persistent", self.busid]).strip() + # strip to remove trailing newline, which must not appear in zipl BLS + return set(["rd.dasd=%s" % devspec]) class NVDIMMNamespaceDevice(DiskDevice): diff --git a/blivet/populator/helpers/disk.py b/blivet/populator/helpers/disk.py index ce2cb73be..d0cef3165 100644 --- a/blivet/populator/helpers/disk.py +++ b/blivet/populator/helpers/disk.py @@ -202,9 +202,6 @@ def match(cls, data): def _get_kwargs(self): kwargs = super(DASDDevicePopulator, self)._get_kwargs() kwargs["busid"] = udev.device_get_dasd_bus_id(self.data) - kwargs["opts"] = {} - for attr in ['readonly', 'use_diag', 'erplog', 'failfast']: - kwargs["opts"][attr] = udev.device_get_dasd_flag(self.data, attr) log.info("%s is a dasd device", udev.device_get_name(self.data)) return kwargs