changeset 11161:a6839d90563b

6893587 findroot entry in grub gets wrong partition number during install w/ osol-125
author Sheshadri Vasudevan <Sheshadri.Vasudevan@Sun.COM>
date Mon, 23 Nov 2009 07:23:59 +0530
parents 334d14d98fd2
children 591186e7cb56
files usr/src/cmd/boot/bootadm/bootadm.c
diffstat 1 files changed, 13 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/cmd/boot/bootadm/bootadm.c	Mon Nov 09 12:07:46 2009 +0100
+++ b/usr/src/cmd/boot/bootadm/bootadm.c	Mon Nov 23 07:23:59 2009 +0530
@@ -4890,7 +4890,7 @@
 #ifdef i386
 	ext_part_t *epp;
 	uint32_t secnum, numsec;
-	int rval, pno;
+	int rval, pno, ext_partno = -1;
 #endif
 
 	/* form whole disk (p0) */
@@ -4943,15 +4943,6 @@
 				partno = i;
 				break;
 			}
-#ifdef i386
-		} else if (fdisk_is_dos_extended(part->systid)) {
-			rval = fdisk_get_solaris_part(epp, &pno, &secnum,
-			    &numsec);
-			if (rval == FDISK_SUCCESS) {
-				partno = pno - 1;
-				break;
-			}
-#endif
 		} else {	/* look for solaris partition, old and new */
 #ifdef i386
 			if ((part->systid == SUNIXOS &&
@@ -4964,9 +4955,21 @@
 				partno = i;
 				break;
 			}
+
+#ifdef i386
+			if (fdisk_is_dos_extended(part->systid))
+				ext_partno = i;
+#endif
 		}
 	}
 #ifdef i386
+	/* If no primary solaris partition, check extended partition */
+	if ((partno == -1) && (ext_partno != -1)) {
+		rval = fdisk_get_solaris_part(epp, &pno, &secnum, &numsec);
+		if (rval == FDISK_SUCCESS) {
+			partno = pno - 1;
+		}
+	}
 	libfdisk_fini(&epp);
 #endif
 	return (partno);