svn commit: r241023 - head/sys/boot/common
Andrey V. Elsukov
ae at FreeBSD.org
Fri Sep 28 10:49:42 UTC 2012
Author: ae
Date: Fri Sep 28 10:49:41 2012
New Revision: 241023
URL: http://svn.freebsd.org/changeset/base/241023
Log:
Make the loader a bit smarter, when it tries to open disk and the slice
number is not exactly specified. When the disk has MBR, also try to read
BSD label after ptable_getpart() call. When the disk has GPT, also set
d_partition to 255. Mostly, this is how it worked before.
Modified:
head/sys/boot/common/disk.c
Modified: head/sys/boot/common/disk.c
==============================================================================
--- head/sys/boot/common/disk.c Fri Sep 28 08:22:51 2012 (r241022)
+++ head/sys/boot/common/disk.c Fri Sep 28 10:49:41 2012 (r241023)
@@ -179,12 +179,21 @@ disk_open(struct disk_devdesc *dev, off_
rc = ptable_getpart(od->table, &part, dev->d_partition);
if (rc == 0)
dev->d_offset = part.start;
- } else if (dev->d_slice > 0) {
+ } else if (dev->d_slice >= 0) {
/* Try to get information about partition */
- rc = ptable_getpart(od->table, &part, dev->d_slice);
+ if (dev->d_slice == 0)
+ rc = ptable_getbestpart(od->table, &part);
+ else
+ rc = ptable_getpart(od->table, &part, dev->d_slice);
if (rc != 0) /* Partition doesn't exist */
goto out;
dev->d_offset = part.start;
+ if (dev->d_slice == 0) {
+ /* Save the slice number of best partition to dev */
+ dev->d_slice = part.index;
+ if (ptable_gettype(od->table) == PTABLE_GPT)
+ dev->d_partition = 255;
+ }
if (dev->d_partition == 255)
goto out; /* Nothing more to do */
/*
@@ -217,13 +226,6 @@ disk_open(struct disk_devdesc *dev, off_
if (rc != 0)
goto out;
dev->d_offset += part.start;
- } else if (dev->d_slice == 0) {
- rc = ptable_getbestpart(od->table, &part);
- if (rc != 0)
- goto out;
- /* Save the slice number of best partition to dev */
- dev->d_slice = part.index;
- dev->d_offset = part.start;
}
out:
if (table != NULL)
More information about the svn-src-all
mailing list