changeset 10726:dd40023f03e8

6887540 panic - page fault in scsi_vhci dur to NULL pointer dereference after RCC pull 6887820 SUNWpmcsr doesn't need to deliver kernel/misc
author Srikanth, Ramana <Ramana.Srikanth@Sun.COM>
date Tue, 06 Oct 2009 16:59:04 -0400
parents cd144ed668c5
children 64d9f366e98f
files usr/src/pkgdefs/SUNWpmcsr/prototype_com usr/src/uts/common/os/sunmdi.c
diffstat 2 files changed, 9 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/pkgdefs/SUNWpmcsr/prototype_com	Tue Oct 06 19:56:15 2009 -0700
+++ b/usr/src/pkgdefs/SUNWpmcsr/prototype_com	Tue Oct 06 16:59:04 2009 -0400
@@ -48,4 +48,3 @@
 d none kernel/drv 0755 root sys
 e pmcsconf kernel/drv/pmcs.conf 0644 root sys
 d none kernel/kmdb 0755 root sys
-d none kernel/misc 0755 root sys
--- a/usr/src/uts/common/os/sunmdi.c	Tue Oct 06 19:56:15 2009 -0700
+++ b/usr/src/uts/common/os/sunmdi.c	Tue Oct 06 16:59:04 2009 -0400
@@ -2133,10 +2133,10 @@
 		    pip = (mdi_pathinfo_t *)MDI_PI(pip)->pi_client_link)
 			;
 
-		/* If path can't be selected then MDI_FAILURE is returned. */
+		/* If path can't be selected then MDI_NOPATH is returned. */
 		if (pip == NULL) {
 			MDI_CLIENT_UNLOCK(ct);
-			return (MDI_FAILURE);
+			return (MDI_NOPATH);
 		}
 
 		/*
@@ -2157,6 +2157,13 @@
 			return (MDI_FAILURE);
 		}
 
+		/* Return MDI_BUSY if we have a transient condition */
+		if (MDI_PI_IS_TRANSIENT(pip)) {
+			MDI_PI_UNLOCK(pip);
+			MDI_CLIENT_UNLOCK(ct);
+			return (MDI_BUSY);
+		}
+
 		/*
 		 * Return the path in hold state. Caller should release the
 		 * lock by calling mdi_rele_path()