From 0452e472993c7542fb1b8ef2bbeede4e9ded07b2 Mon Sep 17 00:00:00 2001 From: dholland Date: Sun, 2 Aug 2015 18:18:46 +0000 Subject: 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. --- sys/ufs/lfs/lfs_segment.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'sys/ufs/lfs/lfs_segment.c') 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 -__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); -- cgit