mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-24 11:29:10 +00:00
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
This commit is contained in:
parent
aae0c9de03
commit
9d200697d7
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=241294
@ -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 **spap)
|
||||
|
||||
/*
|
||||
* 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 **spap)
|
||||
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 @@ probe_drive(struct dsk *dsk, spa_t **spap)
|
||||
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;
|
||||
|
Loading…
Reference in New Issue
Block a user