Hi,
On 01/27/2010 04:37 PM, Chris Lumens wrote:
There are various issues with the EDD C-code, mostly that it is way
too complicated for what it does. This patch re-implements it in
python, and adds a compareDrives substitute to the storage class.
Note that the compareDrives substitute is a copy and paste job of the
isys code (using the new storage edd_dict). The isys code will be removed
in a separate patch.
The concept looks fine, though I'm not familiar with the intricacies of
our EDD code.
@@ -255,6 +256,7 @@ class Storage(object):
self.zeroMbr = None
self.protectedDevSpecs = []
self.autoPartitionRequests = []
+ self.edd_dict = {}
self.__luksDevs = {}
For consistency, you might want to call it self.eddDict.
Ack will change.
+def get_edd_dict(devices):
+ """Given an array of devices return a dict with the BIOS ID for them."""
+ edd_dict = {}
+
+ for biosdev in range(80, 80 + 15):
+ sysfspath = "/sys/firmware/edd/int13_dev%d" % biosdev
+ if not os.path.exists(sysfspath):
+ break # We are done
+
+ sysfspath = "/sys/firmware/edd/int13_dev%d/mbr_signature" % biosdev
+ if not os.path.exists(sysfspath):
+ log.warning("No mbrsig for biosdev: %d" % biosdev)
+ continue
+
+ try:
+ file = open(sysfspath, "r")
+ eddsig = file.read()
+ file.close()
+ except (IOError, OSError), e:
+ log.warning("Error reading EDD mbrsig for %d: %s" %
+ (biosdev, str(e)))
+ continue
The rest of the storage stuff does:
except (IOError, OSError) as e:
so we should probably do that here too.
Ack, will change.
+ sysfspath = "/sys/firmware/edd/int13_dev%d/sectors" % biosdev
+ try:
+ file = open(sysfspath, "r")
+ eddsize = file.read()
+ file.close()
+ except (IOError, OSError), e:
+ eddsize = None
Likewise.
+ found = []
+ for dev in devices:
+ try:
+ fd = os.open(dev.path, os.O_RDONLY)
+ os.lseek(fd, 440, 0)
+ mbrsig = struct.unpack('I', os.read(fd, 4))
+ os.close(fd)
+ except OSError:
+ log.warning("Error reading mbrsig from disk %s: %s" %
+ (dev.name, str(e)))
+ continue
+
+ mbrsigStr = "0x%08x\n" % mbrsig
+ if mbrsigStr == eddsig:
+ if eddsize:
+ sysfspath = "/sys%s/size" % dev.sysfsPath
+ try:
+ file = open(sysfspath, "r")
+ size = file.read()
+ file.close()
+ except (IOError, OSError), e:
And once more, with feeling.
Thanks for the review,
Hans
_______________________________________________
Anaconda-devel-list mailing list
Anaconda-devel-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/anaconda-devel-list