Print this page
LOCAL: devfs_clean before trying to offline to release refs to dev_info

@@ -5888,10 +5888,17 @@
                             &cookie) == NDI_SUCCESS)
                                 (void) ndi_post_event(dip, dip, cookie, NULL);
                 }
         }
 
+        /*
+         * dv_mknod places a hold on the dev_info_t for each devfs node
+         * created.  If we're to succeed in detaching this device, we must
+         * first release all outstanding references held by devfs.
+         */
+        (void) devfs_clean(pdip, NULL, DV_CLEAN_FORCE);
+
         if (i_ddi_detachchild(dip, flags) != DDI_SUCCESS) {
                 if (flags & NDI_DEVI_OFFLINE) {
                         RIO_DEBUG((CE_NOTE, "devi_detach_node: offline failed."
                             " Calling e_ddi_offline_finalize with result=%d. "
                             "dip=%p", DDI_FAILURE, (void *)dip));