7157666 There was the I/O error while ran discovery.py on i86pc arch AI Client
authorDrew Fisher <drew.fisher@oracle.com>
Wed, 04 Apr 2012 07:30:25 -0600
changeset 1629 a8f3ef646806
parent 1628 27390c5e08de
child 1630 f7755f1df015
7157666 There was the I/O error while ran discovery.py on i86pc arch AI Client
usr/src/lib/install_target/discovery.py
usr/src/lib/install_target/libdiskmgt/diskmgt.py
usr/src/pkg/manifests/system-library-install.mf
--- a/usr/src/lib/install_target/discovery.py	Mon Apr 02 12:11:14 2012 -0700
+++ b/usr/src/lib/install_target/discovery.py	Wed Apr 04 07:30:25 2012 -0600
@@ -39,7 +39,7 @@
 
 import solaris_install.target.vdevs as vdevs
 
-from bootmgmt.pysol import di_find_prop, getmntany, mnttab_open, mnttab_close
+from bootmgmt.pysol import getmntany, mnttab_open, mnttab_close
 
 from solaris_install import CalledProcessError, Popen, run
 from solaris_install.data_object.data_dict import DataObjectDict
@@ -49,7 +49,6 @@
 from solaris_install.target.libbe import be
 from solaris_install.target.libdevinfo import devinfo
 from solaris_install.target.libdiskmgt import const, diskmgt
-from solaris_install.target.libdiskmgt.attributes import DMMediaAttr
 from solaris_install.target.libefi.efi import efi_free, efi_read
 from solaris_install.target.logical import BE, Filesystem, Logical, Zpool, Zvol
 from solaris_install.target.physical import Disk, DiskProp, DiskGeometry, \
@@ -722,21 +721,14 @@
             # trap on the "/pseudo" controller (zvol swap and dump)
             if controller.name == "/pseudo" and add_physical:
                 self.discover_pseudo(controller)
+
+            # skip USB floppy controllers
+            if controller.floppy_controller:
+                continue
+
             else:
                 # extract every drive on the given controller
                 for drive in controller.drives:
-                    # skip USB floppy drives
-                    if controller.attributes is not None and \
-                       controller.attributes.type == const.CTYPE_USB:
-                        try:
-                            di_props = di_find_prop("compatible",
-                                                    controller.name)
-                        except Exception:
-                            di_props = list()
-
-                        if const.DI_FLOPPY in di_props:
-                            continue
-
                     # query libdiskmgt for the drive's information
                     new_disk = self.discover_disk(drive)
 
@@ -754,8 +746,14 @@
         # now walk all the drives in the system to make sure we pick up any
         # disks which have no controller (OVM Xen disks)
         for drive in diskmgt.descriptors_by_type(const.DRIVE):
+            # skip USB floppy controllers
+            if drive.controllers and drive.controllers[0].floppy_controller:
+                continue
+                
+            # skip any drive whose opath starts with "/dev/zvol/rdsk"
             if drive.attributes.opath.startswith(ZVOL_RPATH):
                 continue
+
             new_disk = self.discover_disk(drive)
 
             # skip invalid drives and CDROM drives
--- a/usr/src/lib/install_target/libdiskmgt/diskmgt.py	Mon Apr 02 12:11:14 2012 -0700
+++ b/usr/src/lib/install_target/libdiskmgt/diskmgt.py	Wed Apr 04 07:30:25 2012 -0600
@@ -32,10 +32,11 @@
 import numbers
 import os
 
+from bootmgmt.pysol import di_find_prop
 from solaris_install.target.cgc import CTypesStructureRef
 from solaris_install.target.libdiskmgt import cfunc, const, cstruct
-from solaris_install.target.libdiskmgt.attributes import DMDriveAttr,\
-    DMControllerAttr, DMMediaAttr, DMSliceAttr, DMPartAttr, DMPathAttr,\
+from solaris_install.target.libdiskmgt.attributes import DMDriveAttr, \
+    DMControllerAttr, DMMediaAttr, DMSliceAttr, DMPartAttr, DMPathAttr, \
     DMAliasAttr, DMBusAttr
 from solaris_install.target.libnvpair.cfunc import nvlist_free
 
@@ -351,6 +352,21 @@
     ATYPE = DMControllerAttr
 
     @property
+    def floppy_controller(self):
+        """ property to indicate if the controller is a floppy drive USB
+        controller.
+        """
+
+        if self.attributes is not None and \
+           self.attributes.type == const.CTYPE_USB:
+            try:
+                di_props = di_find_prop("compatible", self.name)
+            except Exception:
+                di_props = list()
+            return const.DI_FLOPPY in di_props
+        return False
+
+    @property
     def bus(self):
         """bus associated with this controller"""
         return self.get_associated_descriptors(const.BUS)[0]
--- a/usr/src/pkg/manifests/system-library-install.mf	Mon Apr 02 12:11:14 2012 -0700
+++ b/usr/src/pkg/manifests/system-library-install.mf	Wed Apr 04 07:30:25 2012 -0600
@@ -177,7 +177,10 @@
 file path=usr/lib/python2.6/vendor-packages/solaris_install/target/libdiskmgt/const.pyc
 file path=usr/lib/python2.6/vendor-packages/solaris_install/target/libdiskmgt/cstruct.py
 file path=usr/lib/python2.6/vendor-packages/solaris_install/target/libdiskmgt/cstruct.pyc
-file path=usr/lib/python2.6/vendor-packages/solaris_install/target/libdiskmgt/diskmgt.py
+# Add bypass generate to allow manual boot-management version 13 dependency
+file \
+    path=usr/lib/python2.6/vendor-packages/solaris_install/target/libdiskmgt/diskmgt.py \
+    pkg.depend.bypass-generate=^usr/lib/python2.6/vendor-packages/bootmgmt/.*$
 file path=usr/lib/python2.6/vendor-packages/solaris_install/target/libdiskmgt/diskmgt.pyc
 dir  path=usr/lib/python2.6/vendor-packages/solaris_install/target/libefi
 file path=usr/lib/python2.6/vendor-packages/solaris_install/target/libefi/__init__.py