Expand libdisk to use 64bit size/offset
Bruce Evans
bde at zeta.org.au
Wed Mar 10 11:16:50 PST 2004
On Wed, 10 Mar 2004, John Baldwin wrote:
> On Tuesday 09 March 2004 07:37 pm, Jun Kuriyama wrote:
> > I found sysinstall(8) cannot handle TB class storage. It looks
> > both of libdisk and sysinstall should be fixed.
> >
> > I'm trying to improve this situation, but I'm not sure I'm going to
> > the right direction. Please look this patch (including my debugging
> > stuff and XXX comments which should be resolved/removed).
This will probably need EFI, since DOS partitions are limited to 2^31
or 2^32 sectors and the sector size may be restricted to 512.
> > http://www.imgsrc.co.jp/~kuriyama/BSD/libdisk-20040310.diff
I didn't look closely.
> > I choose daddr_t as larger storage for offset, size and end member of
> > "struct chunk". I think offset and end is okay, but I don't know
> > daddr_t for offset is correct or not.
>
> dadd_t is a uint32_t, so it won't help. Just use off_t for chunk
> offset/size/end.
Erm, daddr_t is (signed) int64_t. It is the correct type for storing
counts of DEV_BSIZE'd blocks (DEV_BSIZE = 512), so it is correct for
sector counts in libdisk to the extent that libdisk is limited to
DEV_BSIZE'd sectors. Counts of blocks of other sizes should use a
different typedef. E.g., ufs uses types ufs1_daddr_t (32-bit ufs1
block numbers), ufs2_daddr_t (64-bit ufs2 block numbers) and ufs_lbn_t
(64-bit ufs logical block numbers).
libdisk never uses DEV_BSIZE or even its own macro for the units. It
hard-codes 512-all over :-(. So using daddr_t would not be logically
correct but would be less worse than what libdisk already does.
Using off_t for block counts is very bogus. off_t is for byte offsets.
libdisk's "offset" is actually a block number, so it should have the
same [foo_]daddr_t type as "size" and "end".
Bruce
More information about the freebsd-current
mailing list