diff options
| author | dholland <dholland@NetBSD.org> | 2015-08-02 18:18:46 +0000 |
|---|---|---|
| committer | dholland <dholland@NetBSD.org> | 2015-08-02 18:18:46 +0000 |
| commit | 0452e472993c7542fb1b8ef2bbeede4e9ded07b2 (patch) | |
| tree | d205bf092e5157f6cbee18f0c5945e1561f38f2b /sys/ufs/lfs/lfs_segment.c | |
| parent | ce7ab97df2d93f089223154db810050d22f81163 (diff) | |
Pass the fs object to LFS_MAX_DADDR so it can check lfs_is64.
Remove some hackish intentional 64->32 truncations next to the checks
using LFS_MAX_DADDR, and tackle the problem they handled in bmap
instead.
The problem: the magic block pointer value UNWRITTEN has magic value
-2, and if it's not handled specifically, uint32 -> uint64 promotion
turns it into 4294967294, which then causes consternation and
monkeyhouse downstream.
What's here is still kind of a hack, but it's a step forward.
Diffstat (limited to 'sys/ufs/lfs/lfs_segment.c')
| -rw-r--r-- | sys/ufs/lfs/lfs_segment.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/sys/ufs/lfs/lfs_segment.c b/sys/ufs/lfs/lfs_segment.c index b1cabdf9299..9c9dcf11abf 100644 --- a/sys/ufs/lfs/lfs_segment.c +++ b/sys/ufs/lfs/lfs_segment.c @@ -1,4 +1,4 @@ -/* $NetBSD: lfs_segment.c,v 1.250 2015/08/02 18:18:10 dholland Exp $ */ +/* $NetBSD: lfs_segment.c,v 1.251 2015/08/02 18:18:46 dholland Exp $ */ /*- * Copyright (c) 1999, 2000, 2001, 2002, 2003 The NetBSD Foundation, Inc. @@ -60,7 +60,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: lfs_segment.c,v 1.250 2015/08/02 18:18:10 dholland Exp $"); +__KERNEL_RCSID(0, "$NetBSD: lfs_segment.c,v 1.251 2015/08/02 18:18:46 dholland Exp $"); #define _VFS_VNODE_PRIVATE /* XXX: check for VI_MARKER, this has to go */ @@ -1473,8 +1473,7 @@ lfs_update_single(struct lfs *fs, struct segment *sp, if (error) panic("lfs_updatemeta: ulfs_bmaparray returned %d", error); - daddr = (daddr_t)((int32_t)daddr); /* XXX ondisk32 */ - KASSERT(daddr <= LFS_MAX_DADDR); + KASSERT(daddr <= LFS_MAX_DADDR(fs)); if (daddr > 0) daddr = LFS_DBTOFSB(fs, daddr); |
