Author: ae
Date: Mon Mar 31 09:37:11 2014
New Revision: 263965
URL: http://svnweb.freebsd.org/changeset/base/263965

Log:
  MFC r263468:
    When loader(8) inspects MBR, it chooses GPT as main partition table,
    when MBR contains only PMBR entry or it is bootcamp-compatible.
    If MBR has PMBR entry and some other, the loader rejects it.
  
    Make these checks to be less strict. If loader decided that PMBR
    isn't suitable for GPT, it will use MBR.
  
    Reported by:        Paul Thornton

Modified:
  stable/9/sys/boot/common/part.c
Directory Properties:
  stable/9/sys/   (props changed)
  stable/9/sys/boot/   (props changed)

Modified: stable/9/sys/boot/common/part.c
==============================================================================
--- stable/9/sys/boot/common/part.c     Mon Mar 31 09:34:46 2014        
(r263964)
+++ stable/9/sys/boot/common/part.c     Mon Mar 31 09:37:11 2014        
(r263965)
@@ -634,7 +634,7 @@ ptable_open(void *dev, off_t sectors, ui
        for (i = 0, count = 0; i < NDOSPART; i++) {
                if (dp[i].dp_flag != 0 && dp[i].dp_flag != 0x80) {
                        DEBUG("invalid partition flag %x", dp[i].dp_flag);
-                       break;
+                       goto out;
                }
 #ifdef LOADER_GPT_SUPPORT
                if (dp[i].dp_typ == DOSPTYP_PMBR) {
@@ -646,15 +646,12 @@ ptable_open(void *dev, off_t sectors, ui
                        count++;
        }
        /* Do we have some invalid values? */
-       if (i != NDOSPART ||
-           (table->type == PTABLE_GPT && count > 1)) {
+       if (table->type == PTABLE_GPT && count > 1) {
                if (dp[1].dp_typ != DOSPTYP_HFS) {
                        table->type = PTABLE_NONE;
-                       DEBUG("invalid values detected, ignore "
-                           "partition table");
-                       goto out;
-               }
-               DEBUG("Bootcamp detected");
+                       DEBUG("Incorrect PMBR, ignore it");
+               } else
+                       DEBUG("Bootcamp detected");
        }
 #ifdef LOADER_GPT_SUPPORT
        if (table->type == PTABLE_GPT) {
_______________________________________________
svn-src-stable-9@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-stable-9
To unsubscribe, send any mail to "svn-src-stable-9-unsubscr...@freebsd.org"

Reply via email to