HomeFreeBSD

zfsboot: drvsize() may be unusable on some systems

Description

zfsboot: drvsize() may be unusable on some systems

From user report, the errors are seen:
error 1
error 1
gptzfsboot: error 1 lba 4294967288
gptzfsboot: error 1 lba 1
gptzfsboot: no ZFS pools located, can't boot

The first two errors above are from issuing INT13 EAX=0x4800, meaning we
need to check if EDD is available and use EAX=0x800 if not.

For an workaround I'm using the similar idea as in biosdisk.c - first probe
ah=8h, then check if we have EDD.

Note we would like to see the correct disk size info, but we *may*
get away with anything >64MB, so we could at least test 2 zfs pool labels
on whole disk setup and not to freak out the INT13 interface.

If we get away with initial disk probing, then we have partition sizes from
the partition table and we should be able to complete the disk probing.

Note: this update does not provide full fix to all errors, but we get
the drvsize() errors removed.

Reported by: Michael W. Lucas
Reviewed by: julian
Differential Revision: https://reviews.freebsd.org/D10591

Details

Provenance
tsoomeAuthored on
Reviewer
julian
Differential Revision
D10591: zfsboot: drvsize() may be unusable on some systems
Parents
rS317784: cache: stop holding the ncneg_hot lock across purging
Branches
Unknown
Tags
Unknown