mirror of
https://git.FreeBSD.org/src.git
synced 2025-02-05 18:05:16 +00:00
Use full 64bit arithmetic when converting file offsets to block numbers - fixes
booting on filesystems with inode numbers with values above 4194304. Submitted by: ps
This commit is contained in:
parent
65d1e61587
commit
7b3569ff05
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=186243
@ -60,7 +60,7 @@ gptzfsboot.bin: gptzfsboot.out
|
||||
objcopy -S -O binary gptzfsboot.out ${.TARGET}
|
||||
|
||||
gptzfsboot.out: ${BTXCRT} zfsboot.o sio.o
|
||||
${LD} ${LDFLAGS} -Ttext ${ORG2} -o ${.TARGET} ${.ALLSRC}
|
||||
${LD} ${LDFLAGS} -Ttext ${ORG2} -o ${.TARGET} ${.ALLSRC} ${LIBSTAND}
|
||||
|
||||
zfsboot.o: ${.CURDIR}/../../zfs/zfsimpl.c
|
||||
|
||||
|
@ -80,7 +80,7 @@ zfsboot.bin: zfsboot.out
|
||||
objcopy -S -O binary zfsboot.out ${.TARGET}
|
||||
|
||||
zfsboot.out: ${BTXCRT} zfsboot.o sio.o
|
||||
${LD} ${LDFLAGS} -Ttext ${ORG2} -o ${.TARGET} ${.ALLSRC}
|
||||
${LD} ${LDFLAGS} -Ttext ${ORG2} -o ${.TARGET} ${.ALLSRC} ${LIBSTAND}
|
||||
|
||||
zfsboot.o: zfsboot.s
|
||||
|
||||
|
@ -873,17 +873,12 @@ dnode_read(spa_t *spa, const dnode_phys_t *dnode, off_t offset, void *buf, size_
|
||||
int i, rc;
|
||||
|
||||
/*
|
||||
* We truncate the offset to 32bits, mainly so that I don't
|
||||
* have to find a copy of __divdi3 to put into the bootstrap.
|
||||
* I don't think the bootstrap needs to access anything bigger
|
||||
* than 2G anyway. Note that block addresses are still 64bit
|
||||
* so it doesn't affect the possible size of the media.
|
||||
* We still use 64bit block numbers so that the bitshifts
|
||||
* work correctly. Note: bsize may not be a power of two here.
|
||||
* Note: bsize may not be a power of two here so we need to do an
|
||||
* actual divide rather than a bitshift.
|
||||
*/
|
||||
while (buflen > 0) {
|
||||
uint64_t bn = ((int) offset) / bsize;
|
||||
int boff = ((int) offset) % bsize;
|
||||
uint64_t bn = offset / bsize;
|
||||
int boff = offset % bsize;
|
||||
int ibn;
|
||||
const blkptr_t *indbp;
|
||||
blkptr_t bp;
|
||||
|
Loading…
x
Reference in New Issue
Block a user