Login
Log in using an SSO provider:
Fedora Account System
Red Hat Associate
Red Hat Customer
Login using a Red Hat Bugzilla account
Forgot Password
Create an Account
Red Hat Bugzilla – Attachment 482104 Details for
Bug 681608
KeyError: '/dev/md126'
Home
New
Search
Simple Search
Advanced Search
My Links
Browse
Requests
Reports
Current State
Search
Tabular reports
Graphical reports
Duplicates
Other Reports
User Changes
Plotly Reports
Bug Status
Bug Severity
Non-Defaults
Product Dashboard
Help
Page Help!
Bug Writing Guidelines
What's new
Browser Support Policy
5.0.4.rh90 Release notes
FAQ
Guides index
User guide
Web Services
Contact
Legal
[?]
This site requires JavaScript to be enabled to function correctly, please enable it.
[patch]
Patch to fix installation to firmware raid in f15
fwraid-f15.3.patch (text/plain), 7.68 KB, created by
David Lehman
on 2011-03-03 15:27:08 UTC
(
hide
)
Description:
Patch to fix installation to firmware raid in f15
Filename:
MIME Type:
Creator:
David Lehman
Created:
2011-03-03 15:27:08 UTC
Size:
7.68 KB
patch
obsolete
>diff --git a/pyanaconda/storage/devices.py b/pyanaconda/storage/devices.py >index d1e767f..41722c3 100644 >--- a/pyanaconda/storage/devices.py >+++ b/pyanaconda/storage/devices.py >@@ -2810,7 +2810,7 @@ class MDRaidArrayDevice(StorageDevice): > device.setup() > udev_settle() > >- if self.spares: >+ if self.spares > 0: > # mdadm doesn't like it when you try to incrementally add spares > return > >diff --git a/pyanaconda/storage/devicetree.py b/pyanaconda/storage/devicetree.py >index a57e5e1..9f86238 100644 >--- a/pyanaconda/storage/devicetree.py >+++ b/pyanaconda/storage/devicetree.py >@@ -172,7 +172,11 @@ class DeviceTree(object): > self.iscsi = iscsi > self.dasd = dasd > >- self.setDiskImages(getattr(conf, "diskImages", {})) >+ self.diskImages = {} >+ images = getattr(conf, "diskImages", {}) >+ if images: >+ # this will overwrite self.exclusiveDisks >+ self.setDiskImages(images) > > # protected device specs as provided by the user > self.protectedDevSpecs = getattr(conf, "protectedDevSpecs", []) >@@ -828,7 +832,21 @@ class DeviceTree(object): > elif udev_device_get_md_container(info): > diskType = MDRaidArrayDevice > parentName = devicePathToName(udev_device_get_md_container(info)) >- kwargs["parents"] = [ self.getDeviceByName(parentName) ] >+ container = self.getDeviceByName(parentName) >+ if not container: >+ container_sysfs = "/class/block/" + parentName >+ container_info = udev_get_block_device(container_sysfs) >+ if not container_info: >+ log.error("failed to find md container %s at %s" >+ % (parentName, container_sysfs)) >+ return >+ >+ container = self.addUdevDevice(container_info) >+ if not container: >+ log.error("failed to scan md container %s" % parentName) >+ return >+ >+ kwargs["parents"] = [container] > kwargs["level"] = udev_device_get_md_level(info) > kwargs["memberDevices"] = int(udev_device_get_md_devices(info)) > kwargs["uuid"] = udev_device_get_md_uuid(info) >@@ -955,7 +973,7 @@ class DeviceTree(object): > elif udev_device_is_dm(info): > log.debug("%s is a device-mapper device" % name) > device = self.addUdevDMDevice(info) >- elif udev_device_is_md(info): >+ elif udev_device_is_md(info) and not udev_device_get_md_container(info): > log.debug("%s is an md device" % name) > if uuid: > # try to find the device by uuid >@@ -1311,36 +1329,60 @@ class DeviceTree(object): > log.warning("invalid data for %s: %s" % (name, e)) > return > >- # try to name the array based on the preferred minor >- md_info = devicelibs.mdraid.mdexamine(device.path) >- md_path = md_info.get("device", "") >- md_name = devicePathToName(md_info.get("device", "")) >- if md_name: >+ md_name = None >+ minor = None >+ >+ # check the list of devices udev knows about to see if the array >+ # this device belongs to is already active >+ for dev in self.topology.devices_iter(): >+ if not udev_device_is_md(dev): >+ continue >+ > try: >- # md_name can be either md# or md/# >- if md_name.startswith("md/"): >- minor = int(md_name[3:]) # strip off leading "md/" >- md_name = "md%d" % minor # use a regular md# name >- else: >- minor = int(md_name[2:]) # strip off leading "md" >- except (IndexError, ValueError): >- minor = None >- md_name = None >- else: >- array = self.getDeviceByName(md_name) >- if array and array.uuid != md_uuid: >- md_name = None >+ dev_uuid = udev_device_get_md_uuid(dev) >+ dev_level = udev_device_get_md_level(dev) >+ except KeyError: >+ continue >+ >+ if dev_uuid is None or dev_level is None: >+ continue >+ >+ if dev_uuid == md_uuid and dev_level == md_level: >+ md_name = udev_device_get_name(dev) >+ minor = udev_device_get_minor(dev) >+ break > > if not md_name: >- # if we don't have a name yet, find the first unused minor >- minor = 0 >- while True: >- if self.getDeviceByName("md%d" % minor): >- minor += 1 >+ # try to name the array based on the preferred minor >+ md_info = devicelibs.mdraid.mdexamine(device.path) >+ md_path = md_info.get("device", "") >+ md_name = devicePathToName(md_info.get("device", "")) >+ if md_name: >+ try: >+ # md_name can be either md# or md/# >+ if md_name.startswith("md/"): >+ minor = int(md_name[3:]) # strip off leading "md/" >+ md_name = "md%d" % minor # use a regular md# name >+ else: >+ minor = int(md_name[2:]) # strip off leading "md" >+ except (IndexError, ValueError): >+ minor = None >+ md_name = None > else: >- break >+ array = self.getDeviceByName(md_name) >+ if array and array.uuid != md_uuid: >+ md_name = None >+ >+ if not md_name: >+ # if we don't have a name yet, find the first unused minor >+ minor = 0 >+ while True: >+ if self.getDeviceByName("md%d" % minor): >+ minor += 1 >+ else: >+ break > >- md_name = "md%d" % minor >+ md_name = "md%d" % minor > > log.debug("using name %s for md array containing member %s" > % (md_name, device.name)) >@@ -1683,7 +1725,7 @@ class DeviceTree(object): > except (IOError, OSError) as e: > msg = str(e) > log.error("failed to %s of %s: %s" % (op, cfg, msg)) >- elif restore: >+ elif restore and os.access(cfg, os.W_OK): > # remove the config since we created it > log.info("removing anaconda-created %s" % cfg) > try: >diff --git a/pyanaconda/storage/udev.py b/pyanaconda/storage/udev.py >index df6d99e..96faf48 100644 >--- a/pyanaconda/storage/udev.py >+++ b/pyanaconda/storage/udev.py >@@ -166,13 +166,10 @@ def udev_device_is_md(info): > if udev_device_is_partition(info): > return False > >- # imsm member disks have MD_METADATA set, but are not arrays >+ # The udev information keeps shifting around. Only md arrays have a >+ # /sys/class/block/<name>/md/ subdirectory. > md_dir = "/sys" + udev_device_get_sysfs_path(info) + "/md" >- >- # isw raid set *members* have MD_METADATA set, but are not arrays! >- return (info.has_key("MD_METADATA") and >- info.get("ID_FS_TYPE") != "isw_raid_member" and >- os.path.exists(md_dir)) >+ return os.path.exists(md_dir) > > def udev_device_is_cciss(info): > """ Return True if the device is a CCISS device. """
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 681608
:
481918
|
481949
|
481961
|
481962
|
481963
|
481980
|
482002
| 482104