svn commit: r241294 - head/sys/boot/i386/zfsboot
Andriy Gapon
avg at FreeBSD.org
Sat Oct 6 19:48:16 UTC 2012
Author: avg
Date: Sat Oct 6 19:48:15 2012
New Revision: 241294
URL: http://svn.freebsd.org/changeset/base/241294
Log:
zfsboot: simplify probe_drive() a little bit
The first discovered pool, whether it covers the whole boot disk or not,
is going to be first in zfs_pools list. So there is no need at all
for spapp parameter.
This commit also fixes a bug where NULL would be assigned to NULL
pointer when probe_drive was called with the spapp parameter of NULL.
MFC after: 21 days
Modified:
head/sys/boot/i386/zfsboot/zfsboot.c
Modified: head/sys/boot/i386/zfsboot/zfsboot.c
==============================================================================
--- head/sys/boot/i386/zfsboot/zfsboot.c Sat Oct 6 19:47:24 2012 (r241293)
+++ head/sys/boot/i386/zfsboot/zfsboot.c Sat Oct 6 19:48:15 2012 (r241294)
@@ -345,7 +345,7 @@ copy_dsk(struct dsk *dsk)
}
static void
-probe_drive(struct dsk *dsk, spa_t **spap)
+probe_drive(struct dsk *dsk)
{
#ifdef GPT
struct gpt_hdr hdr;
@@ -359,9 +359,10 @@ probe_drive(struct dsk *dsk, spa_t **spa
/*
* If we find a vdev on the whole disk, stop here. Otherwise dig
- * out the MBR and probe each slice in turn for a vdev.
+ * out the partition table and probe each slice/partition
+ * in turn for a vdev.
*/
- if (vdev_probe(vdev_read, dsk, spap) == 0)
+ if (vdev_probe(vdev_read, dsk, NULL) == 0)
return;
sec = dmadat->secbuf;
@@ -399,13 +400,7 @@ probe_drive(struct dsk *dsk, spa_t **spa
if (memcmp(&ent->ent_type, &freebsd_zfs_uuid,
sizeof(uuid_t)) == 0) {
dsk->start = ent->ent_lba_start;
- if (vdev_probe(vdev_read, dsk, spap) == 0) {
- /*
- * We record the first pool we find (we will try
- * to boot from that one).
- */
- spap = NULL;
-
+ if (vdev_probe(vdev_read, dsk, NULL) == 0) {
/*
* This slice had a vdev. We need a new dsk
* structure now since the vdev now owns this one.
@@ -428,13 +423,7 @@ trymbr:
if (!dp[i].dp_typ)
continue;
dsk->start = dp[i].dp_start;
- if (vdev_probe(vdev_read, dsk, spap) == 0) {
- /*
- * We record the first pool we find (we will try to boot
- * from that one.
- */
- spap = 0;
-
+ if (vdev_probe(vdev_read, dsk, NULL) == 0) {
/*
* This slice had a vdev. We need a new dsk structure now
* since the vdev now owns this one.
@@ -493,7 +482,7 @@ main(void)
* Probe the boot drive first - we will try to boot from whatever
* pool we find on that drive.
*/
- probe_drive(dsk, &spa);
+ probe_drive(dsk);
/*
* Probe the rest of the drives that the bios knows about. This
@@ -520,20 +509,17 @@ main(void)
dsk->part = 0;
dsk->start = 0;
dsk->init = 0;
- probe_drive(dsk, NULL);
+ probe_drive(dsk);
}
/*
- * If we didn't find a pool on the boot drive, default to the
- * first pool we found, if any.
+ * The first discovered pool, if any, is the pool.
*/
+ spa = spa_get_primary();
if (!spa) {
- spa = spa_get_primary();
- if (!spa) {
- printf("%s: No ZFS pools located, can't boot\n", BOOTPROG);
- for (;;)
- ;
- }
+ printf("%s: No ZFS pools located, can't boot\n", BOOTPROG);
+ for (;;)
+ ;
}
primary_spa = spa;
More information about the svn-src-all
mailing list