Module Name:    src
Committed By:   mlelstv
Date:           Tue Feb 16 23:20:31 UTC 2010

Modified Files:
        src/sbin/fsck_lfs: dir.c inode.c kernelops.h lfs.c pass1.c pass4.c
            pass6.c segwrite.c segwrite.h setup.c vars.c vnode.c
        src/sbin/newfs_lfs: make_lfs.c newfs.c
        src/sys/ufs/lfs: lfs.h lfs_balloc.c lfs_bio.c lfs_inode.c lfs_segment.c
            lfs_subr.c lfs_syscalls.c lfs_vfsops.c

Log Message:
Three changes in a single commit.

- drop the notion of frags (LFS fragments) vs fsb (FFS fragments)
  The code uses a complicated unity function that just makes the
  code difficult to understand.

- support larger sector sizes. Fix disk address computations
  to use DEV_BSIZE in the kernel as required by device drivers
  and to use sector sizes in userland.

- Fix several locking bugs in lfs_bio.c and lfs_subr.c.


To generate a diff of this commit:
cvs rdiff -u -r1.24 -r1.25 src/sbin/fsck_lfs/dir.c
cvs rdiff -u -r1.41 -r1.42 src/sbin/fsck_lfs/inode.c
cvs rdiff -u -r1.3 -r1.4 src/sbin/fsck_lfs/kernelops.h
cvs rdiff -u -r1.31 -r1.32 src/sbin/fsck_lfs/lfs.c
cvs rdiff -u -r1.29 -r1.30 src/sbin/fsck_lfs/pass1.c
cvs rdiff -u -r1.16 -r1.17 src/sbin/fsck_lfs/pass4.c
cvs rdiff -u -r1.22 -r1.23 src/sbin/fsck_lfs/pass6.c
cvs rdiff -u -r1.19 -r1.20 src/sbin/fsck_lfs/segwrite.c
cvs rdiff -u -r1.2 -r1.3 src/sbin/fsck_lfs/segwrite.h
cvs rdiff -u -r1.36 -r1.37 src/sbin/fsck_lfs/setup.c
cvs rdiff -u -r1.13 -r1.14 src/sbin/fsck_lfs/vars.c
cvs rdiff -u -r1.10 -r1.11 src/sbin/fsck_lfs/vnode.c
cvs rdiff -u -r1.15 -r1.16 src/sbin/newfs_lfs/make_lfs.c
cvs rdiff -u -r1.24 -r1.25 src/sbin/newfs_lfs/newfs.c
cvs rdiff -u -r1.132 -r1.133 src/sys/ufs/lfs/lfs.h
cvs rdiff -u -r1.68 -r1.69 src/sys/ufs/lfs/lfs_balloc.c
cvs rdiff -u -r1.116 -r1.117 src/sys/ufs/lfs/lfs_bio.c
cvs rdiff -u -r1.121 -r1.122 src/sys/ufs/lfs/lfs_inode.c
cvs rdiff -u -r1.214 -r1.215 src/sys/ufs/lfs/lfs_segment.c
cvs rdiff -u -r1.73 -r1.74 src/sys/ufs/lfs/lfs_subr.c
cvs rdiff -u -r1.135 -r1.136 src/sys/ufs/lfs/lfs_syscalls.c
cvs rdiff -u -r1.282 -r1.283 src/sys/ufs/lfs/lfs_vfsops.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sbin/fsck_lfs/dir.c
diff -u src/sbin/fsck_lfs/dir.c:1.24 src/sbin/fsck_lfs/dir.c:1.25
--- src/sbin/fsck_lfs/dir.c:1.24	Fri May 16 09:21:59 2008
+++ src/sbin/fsck_lfs/dir.c	Tue Feb 16 23:20:30 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: dir.c,v 1.24 2008/05/16 09:21:59 hannken Exp $	 */
+/* $NetBSD: dir.c,v 1.25 2010/02/16 23:20:30 mlelstv Exp $	 */
 
 /*
  * Copyright (c) 1980, 1986, 1993
@@ -144,7 +144,7 @@
 	    (idesc->id_filesize & (DIRBLKSIZ - 1)) != 0)
 		idesc->id_filesize = roundup(idesc->id_filesize, DIRBLKSIZ);
 	blksiz = idesc->id_numfrags * fs->lfs_fsize;
-	if (chkrange(idesc->id_blkno, fragstofsb(fs, idesc->id_numfrags))) {
+	if (chkrange(idesc->id_blkno, idesc->id_numfrags)) {
 		idesc->id_filesize -= blksiz;
 		return (SKIP);
 	}

Index: src/sbin/fsck_lfs/inode.c
diff -u src/sbin/fsck_lfs/inode.c:1.41 src/sbin/fsck_lfs/inode.c:1.42
--- src/sbin/fsck_lfs/inode.c:1.41	Thu Feb  4 23:55:43 2010
+++ src/sbin/fsck_lfs/inode.c	Tue Feb 16 23:20:30 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: inode.c,v 1.41 2010/02/04 23:55:43 christos Exp $	 */
+/* $NetBSD: inode.c,v 1.42 2010/02/16 23:20:30 mlelstv Exp $	 */
 
 /*-
  * Copyright (c) 1997, 1998 The NetBSD Foundation, Inc.
@@ -242,7 +242,7 @@
 			return (n);
 	} else
 		func = dirscan;
-	if (chkrange(idesc->id_blkno, fragstofsb(fs, idesc->id_numfrags)))
+	if (chkrange(idesc->id_blkno, idesc->id_numfrags))
 		return (SKIP);
 
 	devvp = fs->lfs_devvp;

Index: src/sbin/fsck_lfs/kernelops.h
diff -u src/sbin/fsck_lfs/kernelops.h:1.3 src/sbin/fsck_lfs/kernelops.h:1.4
--- src/sbin/fsck_lfs/kernelops.h:1.3	Tue Oct 13 22:04:31 2009
+++ src/sbin/fsck_lfs/kernelops.h	Tue Feb 16 23:20:30 2010
@@ -19,4 +19,6 @@
 };
 extern const struct kernelops kops;
 
+extern long dev_bsize;
+
 #endif /* _LFS_KERNEL_OPS_H_ */

Index: src/sbin/fsck_lfs/lfs.c
diff -u src/sbin/fsck_lfs/lfs.c:1.31 src/sbin/fsck_lfs/lfs.c:1.32
--- src/sbin/fsck_lfs/lfs.c:1.31	Thu Aug  6 00:51:55 2009
+++ src/sbin/fsck_lfs/lfs.c	Tue Feb 16 23:20:30 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: lfs.c,v 1.31 2009/08/06 00:51:55 pooka Exp $ */
+/* $NetBSD: lfs.c,v 1.32 2010/02/16 23:20:30 mlelstv Exp $ */
 /*-
  * Copyright (c) 2003 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -102,6 +102,8 @@
 extern struct uvnodelst getvnodelist[VNODE_HASH_MAX];
 extern int nvnodes;
 
+long dev_bsize;
+
 static int
 lfs_fragextend(struct uvnode *, int, int, daddr_t, struct ubuf **);
 
@@ -119,12 +121,12 @@
 
 	if (bp->b_flags & B_READ) {
 		count = kops.ko_pread(bp->b_vp->v_fd, bp->b_data, bp->b_bcount,
-		    dbtob(bp->b_blkno));
+		    bp->b_blkno * dev_bsize);
 		if (count == bp->b_bcount)
 			bp->b_flags |= B_DONE;
 	} else {
 		count = kops.ko_pwrite(bp->b_vp->v_fd, bp->b_data, bp->b_bcount,
-		    dbtob(bp->b_blkno));
+		    bp->b_blkno * dev_bsize);
 		if (count == 0) {
 			perror("pwrite");
 			return -1;
@@ -467,22 +469,27 @@
 	tryalt = 0;
 	if (dummy_read) {
 		if (sblkno == 0)
-			sblkno = btodb(LFS_LABELPAD);
+			sblkno = LFS_LABELPAD / dev_bsize;
 		fs = ecalloc(1, sizeof(*fs));
 		fs->lfs_devvp = devvp;
 	} else {
 		if (sblkno == 0) {
-			sblkno = btodb(LFS_LABELPAD);
+			sblkno = LFS_LABELPAD / dev_bsize;
 			tryalt = 1;
 		} else if (debug) {
 			printf("No -b flag given, not attempting to verify checkpoint\n");
 		}
+
+		dev_bsize = DEV_BSIZE;
+
 		error = bread(devvp, sblkno, LFS_SBPAD, NOCRED, 0, &bp);
 		fs = ecalloc(1, sizeof(*fs));
 		fs->lfs_dlfs = *((struct dlfs *) bp->b_data);
 		fs->lfs_devvp = devvp;
 		bp->b_flags |= B_INVAL;
 		brelse(bp, 0);
+
+		dev_bsize = fs->lfs_fsize >> fs->lfs_fsbtodb;
 	
 		if (tryalt) {
 			error = bread(devvp, fsbtodb(fs, fs->lfs_sboffs[1]),
@@ -977,7 +984,7 @@
 	struct lfs *fs;
 	struct indir indirs[NIADDR+2], *idp;
 	daddr_t	lbn, lastblock;
-	int bb, bcount;
+	int bcount;
 	int error, frags, i, nsize, osize, num;
 
 	ip = VTOI(vp);
@@ -1035,13 +1042,12 @@
 		if (lblktosize(fs, lbn) >= ip->i_ffs1_size) {
 			/* Brand new block or fragment */
 			frags = numfrags(fs, nsize);
-			bb = fragstofsb(fs, frags);
 			if (bpp) {
 				*bpp = bp = getblk(vp, lbn, nsize);
 				bp->b_blkno = UNWRITTEN;
 			}
-			ip->i_lfs_effnblks += bb;
-			fs->lfs_bfree -= bb;
+			ip->i_lfs_effnblks += frags;
+			fs->lfs_bfree -= frags;
 			ip->i_ffs1_db[lbn] = UNWRITTEN;
 		} else {
 			if (nsize <= osize) {
@@ -1072,14 +1078,14 @@
 	 * Do byte accounting all at once, so we can gracefully fail *before*
 	 * we start assigning blocks.
 	 */
-        bb = fsbtodb(fs, 1); /* bb = VFSTOUFS(vp->v_mount)->um_seqinc; */
+        frags = fsbtodb(fs, 1); /* frags = VFSTOUFS(vp->v_mount)->um_seqinc; */
 	bcount = 0;
 	if (daddr == UNASSIGNED) {
-		bcount = bb;
+		bcount = frags;
 	}
 	for (i = 1; i < num; ++i) {
 		if (!indirs[i].in_exists) {
-			bcount += bb;
+			bcount += frags;
 		}
 	}
 	fs->lfs_bfree -= bcount;
@@ -1127,7 +1133,6 @@
 	/*
 	 * Get the existing block from the cache, if requested.
 	 */
-	frags = fsbtofrags(fs, bb);
 	if (bpp)
 		*bpp = bp = getblk(vp, lbn, blksize(fs, ip, lbn));
 
@@ -1191,13 +1196,13 @@
 {
 	struct inode *ip;
 	struct lfs *fs;
-	long bb;
+	int frags;
 	int error;
 	size_t obufsize;
 
 	ip = VTOI(vp);
 	fs = ip->i_lfs;
-	bb = (long)fragstofsb(fs, numfrags(fs, nsize - osize));
+	frags = (long)numfrags(fs, nsize - osize);
 	error = 0;
 
 	/*
@@ -1211,8 +1216,8 @@
 		goto out;
 	}
 
-	fs->lfs_bfree -= bb;
-	ip->i_lfs_effnblks += bb;
+	fs->lfs_bfree -= frags;
+	ip->i_lfs_effnblks += frags;
 	ip->i_flag |= IN_CHANGE | IN_UPDATE;
 
 	if (bpp) {

Index: src/sbin/fsck_lfs/pass1.c
diff -u src/sbin/fsck_lfs/pass1.c:1.29 src/sbin/fsck_lfs/pass1.c:1.30
--- src/sbin/fsck_lfs/pass1.c:1.29	Mon Oct  8 21:39:49 2007
+++ src/sbin/fsck_lfs/pass1.c	Tue Feb 16 23:20:30 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: pass1.c,v 1.29 2007/10/08 21:39:49 ad Exp $	 */
+/* $NetBSD: pass1.c,v 1.30 2010/02/16 23:20:30 mlelstv Exp $	 */
 
 /*
  * Copyright (c) 1980, 1986, 1993
@@ -328,7 +328,7 @@
 	struct dups *dlp;
 	struct dups *new;
 
-	if ((anyout = chkrange(blkno, fragstofsb(fs, idesc->id_numfrags))) != 0) {
+	if ((anyout = chkrange(blkno, idesc->id_numfrags)) != 0) {
 		blkerror(idesc->id_number, "BAD", blkno);
 		if (badblk++ >= MAXBAD) {
 			pwarn("EXCESSIVE BAD BLKS I=%llu",
@@ -342,7 +342,7 @@
 	} else if (!testbmap(blkno)) {
 		seg_table[dtosn(fs, blkno)].su_nbytes += idesc->id_numfrags * fs->lfs_fsize;
 	}
-	for (ndblks = fragstofsb(fs, idesc->id_numfrags); ndblks > 0; blkno++, ndblks--) {
+	for (ndblks = idesc->id_numfrags; ndblks > 0; blkno++, ndblks--) {
 		if (anyout && chkrange(blkno, 1)) {
 			res = SKIP;
 		} else if (!testbmap(blkno)) {

Index: src/sbin/fsck_lfs/pass4.c
diff -u src/sbin/fsck_lfs/pass4.c:1.16 src/sbin/fsck_lfs/pass4.c:1.17
--- src/sbin/fsck_lfs/pass4.c:1.16	Thu Nov  9 19:36:36 2006
+++ src/sbin/fsck_lfs/pass4.c	Tue Feb 16 23:20:30 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: pass4.c,v 1.16 2006/11/09 19:36:36 christos Exp $	 */
+/* $NetBSD: pass4.c,v 1.17 2010/02/16 23:20:30 mlelstv Exp $	 */
 
 /*
  * Copyright (c) 1980, 1986, 1993
@@ -154,7 +154,7 @@
 	int sn;
 
 	sn = dtosn(fs, blkno);
-	for (ndblks = fragstofsb(fs, idesc->id_numfrags); ndblks > 0; blkno++, ndblks--) {
+	for (ndblks = idesc->id_numfrags; ndblks > 0; blkno++, ndblks--) {
 		if (chkrange(blkno, 1)) {
 			res = SKIP;
 		} else if (testbmap(blkno) || preen) {

Index: src/sbin/fsck_lfs/pass6.c
diff -u src/sbin/fsck_lfs/pass6.c:1.22 src/sbin/fsck_lfs/pass6.c:1.23
--- src/sbin/fsck_lfs/pass6.c:1.22	Fri May 16 09:21:59 2008
+++ src/sbin/fsck_lfs/pass6.c	Tue Feb 16 23:20:30 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: pass6.c,v 1.22 2008/05/16 09:21:59 hannken Exp $	 */
+/* $NetBSD: pass6.c,v 1.23 2010/02/16 23:20:30 mlelstv Exp $	 */
 
 /*-
  * Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -86,7 +86,8 @@
 	struct inode *ip;
 	daddr_t daddr, ooff;
 	int num, error;
-	int i, bb, osize = 0, obb = 0;
+	int i, osize = 0;
+	int frags, ofrags = 0;
 	u_int32_t oldsn, sn;
 
 	ip = VTOI(vp);
@@ -99,23 +100,23 @@
 	if (daddr > 0)
 		daddr = dbtofsb(fs, daddr);
 
-	bb = fragstofsb(fs, numfrags(fs, size));
+	frags = numfrags(fs, size);
 	switch (num) {
 	case 0:
 		ooff = ip->i_ffs1_db[lbn];
 		if (ooff <= 0)
-			ip->i_ffs1_blocks += bb;
+			ip->i_ffs1_blocks += frags;
 		else {
 			/* possible fragment truncation or extension */
-			obb = btofsb(fs, ip->i_lfs_fragsize[lbn]);
-			ip->i_ffs1_blocks += (bb - obb);
+			ofrags = ip->i_lfs_fragsize[lbn];
+			ip->i_ffs1_blocks += (frags - ofrags);
 		}
 		ip->i_ffs1_db[lbn] = ndaddr;
 		break;
 	case 1:
 		ooff = ip->i_ffs1_ib[a[0].in_off];
 		if (ooff <= 0)
-			ip->i_ffs1_blocks += bb;
+			ip->i_ffs1_blocks += frags;
 		ip->i_ffs1_ib[a[0].in_off] = ndaddr;
 		break;
 	default:
@@ -126,7 +127,7 @@
 
 		ooff = ((ufs_daddr_t *) bp->b_data)[ap->in_off];
 		if (ooff <= 0)
-			ip->i_ffs1_blocks += bb;
+			ip->i_ffs1_blocks += frags;
 		((ufs_daddr_t *) bp->b_data)[ap->in_off] = ndaddr;
 		(void) VOP_BWRITE(bp);
 	}
@@ -188,7 +189,7 @@
 	if (daddr <= 0) {
 		fs->lfs_bfree -= btofsb(fs, size);
 	} else if (size != osize) {
-		fs->lfs_bfree -= (bb - obb);
+		fs->lfs_bfree -= (frags - ofrags);
 	}
 
 	/*
@@ -292,7 +293,7 @@
 
 	/* Check that the blocks do not lie within clean segments. */
 	anyout = anynew = 0;
-	for (i = 0; i < fragstofsb(fs, idesc->id_numfrags); i++) {
+	for (i = 0; i < idesc->id_numfrags; i++) {
 		sn = dtosn(fs, idesc->id_blkno + i);
 		if (sn < 0 || sn >= fs->lfs_nseg ||
 		    (seg_table[sn].su_flags & SEGUSE_DIRTY) == 0) {

Index: src/sbin/fsck_lfs/segwrite.c
diff -u src/sbin/fsck_lfs/segwrite.c:1.19 src/sbin/fsck_lfs/segwrite.c:1.20
--- src/sbin/fsck_lfs/segwrite.c:1.19	Fri May 16 09:21:59 2008
+++ src/sbin/fsck_lfs/segwrite.c	Tue Feb 16 23:20:30 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: segwrite.c,v 1.19 2008/05/16 09:21:59 hannken Exp $ */
+/* $NetBSD: segwrite.c,v 1.20 2010/02/16 23:20:30 mlelstv Exp $ */
 /*-
  * Copyright (c) 2003 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -440,7 +440,8 @@
 	struct uvnode *vp;
 	daddr_t daddr, ooff;
 	int num, error;
-	int bb, osize, obb;
+	int osize;
+	int frags, ofrags;
 
 	vp = sp->vp;
 	ip = VTOI(vp);
@@ -451,23 +452,23 @@
 	if (daddr > 0)
 		daddr = dbtofsb(fs, daddr);
 
-	bb = fragstofsb(fs, numfrags(fs, size));
+	frags = numfrags(fs, size);
 	switch (num) {
 	case 0:
 		ooff = ip->i_ffs1_db[lbn];
 		if (ooff == UNWRITTEN)
-			ip->i_ffs1_blocks += bb;
+			ip->i_ffs1_blocks += frags;
 		else {
 			/* possible fragment truncation or extension */
-			obb = btofsb(fs, ip->i_lfs_fragsize[lbn]);
-			ip->i_ffs1_blocks += (bb - obb);
+			ofrags = btofsb(fs, ip->i_lfs_fragsize[lbn]);
+			ip->i_ffs1_blocks += (frags - ofrags);
 		}
 		ip->i_ffs1_db[lbn] = ndaddr;
 		break;
 	case 1:
 		ooff = ip->i_ffs1_ib[a[0].in_off];
 		if (ooff == UNWRITTEN)
-			ip->i_ffs1_blocks += bb;
+			ip->i_ffs1_blocks += frags;
 		ip->i_ffs1_ib[a[0].in_off] = ndaddr;
 		break;
 	default:
@@ -478,7 +479,7 @@
 
 		ooff = ((ufs_daddr_t *) bp->b_data)[ap->in_off];
 		if (ooff == UNWRITTEN)
-			ip->i_ffs1_blocks += bb;
+			ip->i_ffs1_blocks += frags;
 		((ufs_daddr_t *) bp->b_data)[ap->in_off] = ndaddr;
 		(void) VOP_BWRITE(bp);
 	}
@@ -520,7 +521,7 @@
 	struct uvnode *vp;
 	daddr_t lbn;
 	int i, nblocks, num;
-	int bb;
+	int frags;
 	int bytesleft, size;
 
 	vp = sp->vp;
@@ -585,10 +586,10 @@
 		for (bytesleft = sbp->b_bcount; bytesleft > 0;
 		    bytesleft -= fs->lfs_bsize) {
 			size = MIN(bytesleft, fs->lfs_bsize);
-			bb = fragstofsb(fs, numfrags(fs, size));
+			frags = numfrags(fs, size);
 			lbn = *sp->start_lbp++;
 			lfs_update_single(fs, sp, lbn, fs->lfs_offset, size);
-			fs->lfs_offset += bb;
+			fs->lfs_offset += frags;
 		}
 
 	}

Index: src/sbin/fsck_lfs/segwrite.h
diff -u src/sbin/fsck_lfs/segwrite.h:1.2 src/sbin/fsck_lfs/segwrite.h:1.3
--- src/sbin/fsck_lfs/segwrite.h:1.2	Mon Apr 28 20:23:08 2008
+++ src/sbin/fsck_lfs/segwrite.h	Tue Feb 16 23:20:30 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: segwrite.h,v 1.2 2008/04/28 20:23:08 martin Exp $ */
+/* $NetBSD: segwrite.h,v 1.3 2010/02/16 23:20:30 mlelstv Exp $ */
 /*-
  * Copyright (c) 2003 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -33,7 +33,7 @@
  */
 #define	LFS_PARTIAL_FITS(fs) \
 	((fs)->lfs_fsbpseg - ((fs)->lfs_offset - (fs)->lfs_curseg) > \
-	fragstofsb((fs), (fs)->lfs_frag))
+	(fs)->lfs_frag)
 
 /* op values to lfs_writevnodes */
 #define	VN_REG		0

Index: src/sbin/fsck_lfs/setup.c
diff -u src/sbin/fsck_lfs/setup.c:1.36 src/sbin/fsck_lfs/setup.c:1.37
--- src/sbin/fsck_lfs/setup.c:1.36	Fri May 16 09:21:59 2008
+++ src/sbin/fsck_lfs/setup.c	Tue Feb 16 23:20:30 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: setup.c,v 1.36 2008/05/16 09:21:59 hannken Exp $ */
+/* $NetBSD: setup.c,v 1.37 2010/02/16 23:20:30 mlelstv Exp $ */
 
 /*-
  * Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -68,6 +68,7 @@
 #include <sys/stat.h>
 #include <sys/ioctl.h>
 #include <sys/disklabel.h>
+#include <sys/disk.h>
 #include <sys/file.h>
 
 #include <ufs/ufs/inode.h>
@@ -81,6 +82,7 @@
 #include <errno.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <unistd.h>
 #include <string.h>
 #include <time.h>
 #include <util.h>
@@ -94,7 +96,6 @@
 #include "fsutil.h"
 
 extern u_int32_t cksum(void *, size_t);
-static struct disklabel *getdisklabel(const char *, int);
 static uint64_t calcmaxfilesize(int);
 
 ufs_daddr_t *din_table;
@@ -163,7 +164,6 @@
 setup(const char *dev)
 {
 	long bmapsize;
-	struct disklabel *lp;
 	struct stat statb;
 	int doskipclean;
 	u_int64_t maxfilesize;
@@ -215,10 +215,6 @@
 			printf("%s: ", cdevname());
 		errexit("BAD SUPER BLOCK OR IFILE INODE NOT FOUND");
 	}
-	if ((lp = getdisklabel((char *) NULL, fsreadfd)) != NULL)
-		dev_bsize = secsize = lp->d_secsize;
-	else
-		dev_bsize = secsize = DEV_BSIZE;
 
         /* Resize buffer cache now that we have a superblock to guess from. */ 
         bufrehash((fs->lfs_segtabsz + maxino / fs->lfs_ifpb) << 4);
@@ -466,16 +462,3 @@
 	return (0);
 }
 
-static struct disklabel *
-getdisklabel(const char *s, int fd)
-{
-	static struct disklabel lab;
-
-	if (ioctl(fd, DIOCGDINFO, (char *) &lab) < 0) {
-		if (s == NULL)
-			return ((struct disklabel *) NULL);
-		pwarn("ioctl (GCINFO): %s\n", strerror(errno));
-		return NULL;
-	}
-	return (&lab);
-}

Index: src/sbin/fsck_lfs/vars.c
diff -u src/sbin/fsck_lfs/vars.c:1.13 src/sbin/fsck_lfs/vars.c:1.14
--- src/sbin/fsck_lfs/vars.c:1.13	Mon Apr 28 20:23:08 2008
+++ src/sbin/fsck_lfs/vars.c	Tue Feb 16 23:20:30 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: vars.c,v 1.13 2008/04/28 20:23:08 martin Exp $	 */
+/* $NetBSD: vars.c,v 1.14 2010/02/16 23:20:30 mlelstv Exp $	 */
 /*-
  * Copyright (c) 1999, 2000, 2001, 2002, 2003 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -48,8 +48,6 @@
 daddr_t idaddr;			/* inode block containing ifile inode */
 long numdirs, listmax, inplast;
 
-long dev_bsize;			/* computed value of DEV_BSIZE */
-long secsize;			/* actual disk sector size */
 char nflag;			/* assume a no response */
 char yflag;			/* assume a yes response */
 int bflag;			/* location of alternate super block */

Index: src/sbin/fsck_lfs/vnode.c
diff -u src/sbin/fsck_lfs/vnode.c:1.10 src/sbin/fsck_lfs/vnode.c:1.11
--- src/sbin/fsck_lfs/vnode.c:1.10	Thu Aug  6 00:51:55 2009
+++ src/sbin/fsck_lfs/vnode.c	Tue Feb 16 23:20:30 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: vnode.c,v 1.10 2009/08/06 00:51:55 pooka Exp $ */
+/* $NetBSD: vnode.c,v 1.11 2010/02/16 23:20:30 mlelstv Exp $ */
 /*-
  * Copyright (c) 2003 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -75,10 +75,10 @@
 {
 	if (bp->b_flags & B_READ) {
 		return kops.ko_pread(bp->b_vp->v_fd, bp->b_data, bp->b_bcount,
-		    dbtob(bp->b_blkno));
+		    bp->b_blkno * dev_bsize);
 	} else {
 		return kops.ko_pwrite(bp->b_vp->v_fd, bp->b_data, bp->b_bcount,
-		    dbtob(bp->b_blkno));
+		    bp->b_blkno * dev_bsize);
 	}
 }
 

Index: src/sbin/newfs_lfs/make_lfs.c
diff -u src/sbin/newfs_lfs/make_lfs.c:1.15 src/sbin/newfs_lfs/make_lfs.c:1.16
--- src/sbin/newfs_lfs/make_lfs.c:1.15	Sun Feb 22 23:06:23 2009
+++ src/sbin/newfs_lfs/make_lfs.c	Tue Feb 16 23:20:30 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: make_lfs.c,v 1.15 2009/02/22 23:06:23 dholland Exp $	*/
+/*	$NetBSD: make_lfs.c,v 1.16 2010/02/16 23:20:30 mlelstv Exp $	*/
 
 /*-
  * Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -62,7 +62,7 @@
 #if 0
 static char sccsid[] = "@(#)lfs.c	8.5 (Berkeley) 5/24/95";
 #else
-__RCSID("$NetBSD: make_lfs.c,v 1.15 2009/02/22 23:06:23 dholland Exp $");
+__RCSID("$NetBSD: make_lfs.c,v 1.16 2010/02/16 23:20:30 mlelstv Exp $");
 #endif
 #endif /* not lint */
 
@@ -232,7 +232,7 @@
 		nfrags = roundup(nfrags, fs->lfs_frag);
 
 	dip->di_nlink = 1;
-	dip->di_blocks = fragstofsb(fs, nfrags);
+	dip->di_blocks = nfrags;
 
 	dip->di_size = (nfrags << fs->lfs_ffshift);
 	dip->di_atime = dip->di_mtime = dip->di_ctime = fs->lfs_tstamp;
@@ -240,7 +240,7 @@
 	dip->di_inumber = ino;
 	dip->di_gen = 1;
 
-	fsb_per_blk = fragstofsb(fs, blkstofrags(fs, 1));
+	fsb_per_blk = blkstofrags(fs, 1);
 
 	if (NDADDR < nblocks) {
 		/* Count up how many indirect blocks we need, recursively */
@@ -251,7 +251,7 @@
 			ifibc += bb;
 			--bb;
 		}
-		dip->di_blocks += fragstofsb(fs, blkstofrags(fs, ifibc));
+		dip->di_blocks += blkstofrags(fs, ifibc);
 	}
 
 	/* Assign the block addresses for the ifile */

Index: src/sbin/newfs_lfs/newfs.c
diff -u src/sbin/newfs_lfs/newfs.c:1.24 src/sbin/newfs_lfs/newfs.c:1.25
--- src/sbin/newfs_lfs/newfs.c:1.24	Sun Jul 20 01:20:23 2008
+++ src/sbin/newfs_lfs/newfs.c	Tue Feb 16 23:20:30 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: newfs.c,v 1.24 2008/07/20 01:20:23 lukem Exp $	*/
+/*	$NetBSD: newfs.c,v 1.25 2010/02/16 23:20:30 mlelstv Exp $	*/
 
 /*-
  * Copyright (c) 1989, 1992, 1993
@@ -39,7 +39,7 @@
 #if 0
 static char sccsid[] = "@(#)newfs.c	8.5 (Berkeley) 5/24/95";
 #else
-__RCSID("$NetBSD: newfs.c,v 1.24 2008/07/20 01:20:23 lukem Exp $");
+__RCSID("$NetBSD: newfs.c,v 1.25 2010/02/16 23:20:30 mlelstv Exp $");
 #endif
 #endif /* not lint */
 
@@ -103,6 +103,8 @@
 char	device[MAXPATHLEN];
 char	*progname, *special;
 
+extern long	dev_bsize;		/* device block size */
+
 static int64_t strsuftoi64(const char *, const char *, int64_t, int64_t, int *);
 static void usage(void);
 
@@ -315,6 +317,9 @@
 	if (secsize == 0)
 		secsize = geo.dg_secsize;
 
+	/* Make device block size available to low level routines */
+	dev_bsize = secsize;
+
 	/* From here on out fssize is in sectors */
 	if (byte_sized) {
 		fssize /= secsize;
@@ -336,7 +341,7 @@
 			warnx("%s is not a character special device, ignoring -A", special);
 			segsize = 0;
 		} else
-			segsize = auto_segsize(fsi, dbtob(dkw.dkw_size),
+			segsize = auto_segsize(fsi, dkw.dkw_size / secsize,
 			    version);
 	}
 

Index: src/sys/ufs/lfs/lfs.h
diff -u src/sys/ufs/lfs/lfs.h:1.132 src/sys/ufs/lfs/lfs.h:1.133
--- src/sys/ufs/lfs/lfs.h:1.132	Thu Nov  5 17:16:36 2009
+++ src/sys/ufs/lfs/lfs.h	Tue Feb 16 23:20:30 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: lfs.h,v 1.132 2009/11/05 17:16:36 pooka Exp $	*/
+/*	$NetBSD: lfs.h,v 1.133 2010/02/16 23:20:30 mlelstv Exp $	*/
 
 /*-
  * Copyright (c) 1999, 2000, 2001, 2002, 2003 The NetBSD Foundation, Inc.
@@ -203,7 +203,7 @@
 		locked_queue_bytes -= bp->b_bufsize;			\
 		if (locked_queue_count < LFS_WAIT_BUFS &&		\
 		    locked_queue_bytes < LFS_WAIT_BYTES)		\
-			wakeup(&locked_queue_count);			\
+			cv_broadcast(&locked_queue_cv);			\
 		mutex_exit(&lfs_lock);					\
 	}								\
 	(bp)->b_flags &= ~B_LOCKED;					\
@@ -219,7 +219,7 @@
 #  define LFS_DEBUG_COUNTLOCKED(m) do {					\
 	if (lfs_debug_log_subsys[DLOG_LLIST]) {				\
 		lfs_countlocked(&locked_queue_count, &locked_queue_bytes, (m)); \
-		wakeup(&locked_queue_count);				\
+		cv_broadcast(&locked_queue_cv);				\
 	}								\
 } while (0)
 # else
@@ -858,31 +858,30 @@
 #define	blkoff(fs, loc)		((int)((loc) & (fs)->lfs_bmask))
 #define fragoff(fs, loc)    /* calculates (loc % fs->lfs_fsize) */ \
     ((int)((loc) & (fs)->lfs_ffmask))
+
+#if defined (_KERNEL)
+#define	fsbtodb(fs, b)		((b) << ((fs)->lfs_ffshift - DEV_BSHIFT))
+#define	dbtofsb(fs, b)		((b) >> ((fs)->lfs_ffshift - DEV_BSHIFT))
+#else
 #define	fsbtodb(fs, b)		((b) << (fs)->lfs_fsbtodb)
 #define	dbtofsb(fs, b)		((b) >> (fs)->lfs_fsbtodb)
-#define fragstodb(fs, b)	((b) << ((fs)->lfs_blktodb - (fs)->lfs_fbshift))
-#define dbtofrags(fs, b)	((b) >> ((fs)->lfs_blktodb - (fs)->lfs_fbshift))
+#endif
+
 #define	lblkno(fs, loc)		((loc) >> (fs)->lfs_bshift)
 #define	lblktosize(fs, blk)	((blk) << (fs)->lfs_bshift)
-/* Same as above, but named like dbtob(), btodb() */
-#define fsbtob(fs, b)		((b) << ((fs)->lfs_bshift - \
-				(fs)->lfs_blktodb + (fs)->lfs_fsbtodb))
-#define btofsb(fs, b)		((b) >> ((fs)->lfs_bshift - \
-				(fs)->lfs_blktodb + (fs)->lfs_fsbtodb))
-#define fsbtofrags(fs, b)	((b) >> ((fs)->lfs_blktodb - (fs)->lfs_fbshift - \
-				(fs)->lfs_fsbtodb))
-#define fragstofsb(fs, b)	((b) << ((fs)->lfs_blktodb - (fs)->lfs_fbshift - \
-				(fs)->lfs_fsbtodb))
-#define btofrags(fs, b)		((b) >> (fs)->lfs_ffshift)
+
+#define fsbtob(fs, b)		((b) << (fs)->lfs_ffshift)
+#define btofsb(fs, b)		((b) >> (fs)->lfs_ffshift)
+
 #define numfrags(fs, loc)	/* calculates (loc / fs->lfs_fsize) */	\
 	((loc) >> (fs)->lfs_ffshift)
 #define blkroundup(fs, size)	/* calculates roundup(size, fs->lfs_bsize) */ \
 	((off_t)(((size) + (fs)->lfs_bmask) & (~(fs)->lfs_bmask)))
 #define fragroundup(fs, size)	/* calculates roundup(size, fs->lfs_fsize) */ \
 	((off_t)(((size) + (fs)->lfs_ffmask) & (~(fs)->lfs_ffmask)))
-#define fragstoblks(fs, frags)	/* calculates (frags / fs->lfs_frag) */	\
+#define fragstoblks(fs, frags)/* calculates (frags / fs->fs_frag) */ \
 	((frags) >> (fs)->lfs_fbshift)
-#define blkstofrags(fs, blks)	/* calculates (blks * fs->lfs_frag) */	\
+#define blkstofrags(fs, blks)	/* calculates (blks * fs->fs_frag) */ \
 	((blks) << (fs)->lfs_fbshift)
 #define fragnum(fs, fsb)	/* calculates (fsb % fs->lfs_frag) */	\
 	((fsb) & ((fs)->lfs_frag - 1))

Index: src/sys/ufs/lfs/lfs_balloc.c
diff -u src/sys/ufs/lfs/lfs_balloc.c:1.68 src/sys/ufs/lfs/lfs_balloc.c:1.69
--- src/sys/ufs/lfs/lfs_balloc.c:1.68	Wed Mar 18 16:00:24 2009
+++ src/sys/ufs/lfs/lfs_balloc.c	Tue Feb 16 23:20:30 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: lfs_balloc.c,v 1.68 2009/03/18 16:00:24 cegger Exp $	*/
+/*	$NetBSD: lfs_balloc.c,v 1.69 2010/02/16 23:20:30 mlelstv 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_balloc.c,v 1.68 2009/03/18 16:00:24 cegger Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_balloc.c,v 1.69 2010/02/16 23:20:30 mlelstv Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_quota.h"
@@ -118,7 +118,7 @@
 	struct lfs *fs;
 	struct indir indirs[NIADDR+2], *idp;
 	daddr_t	lbn, lastblock;
-	int bb, bcount;
+	int bcount;
 	int error, frags, i, nsize, osize, num;
 
 	ip = VTOI(vp);
@@ -181,8 +181,7 @@
 		if (lblktosize(fs, lbn) >= ip->i_size) {
 			/* Brand new block or fragment */
 			frags = numfrags(fs, nsize);
-			bb = fragstofsb(fs, frags);
-			if (!ISSPACE(fs, bb, cred))
+			if (!ISSPACE(fs, frags, cred))
 				return ENOSPC;
 			if (bpp) {
 				*bpp = bp = getblk(vp, lbn, nsize, 0, 0);
@@ -190,9 +189,9 @@
 				if (flags & B_CLRBUF)
 					clrbuf(bp);
 			}
-			ip->i_lfs_effnblks += bb;
+			ip->i_lfs_effnblks += frags;
 			mutex_enter(&lfs_lock);
-			fs->lfs_bfree -= bb;
+			fs->lfs_bfree -= frags;
 			mutex_exit(&lfs_lock);
 			ip->i_ffs1_db[lbn] = UNWRITTEN;
 		} else {
@@ -225,14 +224,14 @@
 	 * Do byte accounting all at once, so we can gracefully fail *before*
 	 * we start assigning blocks.
 	 */
-	bb = VFSTOUFS(vp->v_mount)->um_seqinc;
+	frags = VFSTOUFS(vp->v_mount)->um_seqinc;
 	bcount = 0;
 	if (daddr == UNASSIGNED) {
-		bcount = bb;
+		bcount = frags;
 	}
 	for (i = 1; i < num; ++i) {
 		if (!indirs[i].in_exists) {
-			bcount += bb;
+			bcount += frags;
 		}
 	}
 	if (ISSPACE(fs, bcount, cred)) {
@@ -294,7 +293,6 @@
 	/*
 	 * Get the existing block from the cache, if requested.
 	 */
-	frags = fsbtofrags(fs, bb);
 	if (bpp)
 		*bpp = bp = getblk(vp, lbn, blksize(fs, ip, lbn), 0, 0);
 
@@ -375,14 +373,14 @@
 {
 	struct inode *ip;
 	struct lfs *fs;
-	long bb;
+	long frags;
 	int error;
 	extern long locked_queue_bytes;
 	size_t obufsize;
 
 	ip = VTOI(vp);
 	fs = ip->i_lfs;
-	bb = (long)fragstofsb(fs, numfrags(fs, nsize - osize));
+	frags = (long)numfrags(fs, nsize - osize);
 	error = 0;
 
 	ASSERT_NO_SEGLOCK(fs);
@@ -399,7 +397,7 @@
 		LFS_DEBUG_COUNTLOCKED("frag");
 	}
 
-	if (!ISSPACE(fs, bb, cred)) {
+	if (!ISSPACE(fs, frags, cred)) {
 		error = ENOSPC;
 		goto out;
 	}
@@ -415,7 +413,7 @@
 		goto out;
 	}
 #ifdef QUOTA
-	if ((error = chkdq(ip, bb, cred, 0))) {
+	if ((error = chkdq(ip, frags, cred, 0))) {
 		if (bpp)
 			brelse(*bpp, 0);
 		goto out;
@@ -429,23 +427,23 @@
 	 */
 
 	if (bpp && ((*bpp)->b_oflags & BO_DELWRI)) {
-		if (!lfs_fits(fs, bb)) {
+		if (!lfs_fits(fs, frags)) {
 			if (bpp)
 				brelse(*bpp, 0);
 #ifdef QUOTA
-			chkdq(ip, -bb, cred, 0);
+			chkdq(ip, -frags, cred, 0);
 #endif
 			rw_exit(&fs->lfs_fraglock);
-			lfs_availwait(fs, bb);
+			lfs_availwait(fs, frags);
 			goto top;
 		}
-		fs->lfs_avail -= bb;
+		fs->lfs_avail -= frags;
 	}
 
 	mutex_enter(&lfs_lock);
-	fs->lfs_bfree -= bb;
+	fs->lfs_bfree -= frags;
 	mutex_exit(&lfs_lock);
-	ip->i_lfs_effnblks += bb;
+	ip->i_lfs_effnblks += frags;
 	ip->i_flag |= IN_CHANGE | IN_UPDATE;
 
 	if (bpp) {

Index: src/sys/ufs/lfs/lfs_bio.c
diff -u src/sys/ufs/lfs/lfs_bio.c:1.116 src/sys/ufs/lfs/lfs_bio.c:1.117
--- src/sys/ufs/lfs/lfs_bio.c:1.116	Fri Jan  8 11:35:12 2010
+++ src/sys/ufs/lfs/lfs_bio.c	Tue Feb 16 23:20:30 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: lfs_bio.c,v 1.116 2010/01/08 11:35:12 pooka Exp $	*/
+/*	$NetBSD: lfs_bio.c,v 1.117 2010/02/16 23:20:30 mlelstv Exp $	*/
 
 /*-
  * Copyright (c) 1999, 2000, 2001, 2002, 2003, 2008 The NetBSD Foundation, Inc.
@@ -60,7 +60,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lfs_bio.c,v 1.116 2010/01/08 11:35:12 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_bio.c,v 1.117 2010/02/16 23:20:30 mlelstv Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -110,12 +110,13 @@
 int locked_queue_rcount = 0;
 long locked_queue_rbytes = 0L;
 
-int lfs_fits_buf(struct lfs *, int, int);
-int lfs_reservebuf(struct lfs *, struct vnode *vp, struct vnode *vp2,
+static int lfs_fits_buf(struct lfs *, int, int);
+static int lfs_reservebuf(struct lfs *, struct vnode *vp, struct vnode *vp2,
     int, int);
-int lfs_reserveavail(struct lfs *, struct vnode *vp, struct vnode *vp2, int);
+static int lfs_reserveavail(struct lfs *, struct vnode *vp, struct vnode *vp2,
+    int);
 
-int
+static int
 lfs_fits_buf(struct lfs *fs, int n, int bytes)
 {
 	int count_fit, bytes_fit;
@@ -124,9 +125,9 @@
 	KASSERT(mutex_owned(&lfs_lock));
 
 	count_fit =
-	    (locked_queue_count + locked_queue_rcount + n < LFS_WAIT_BUFS);
+	    (locked_queue_count + locked_queue_rcount + n <= LFS_WAIT_BUFS);
 	bytes_fit =
-	    (locked_queue_bytes + locked_queue_rbytes + bytes < LFS_WAIT_BYTES);
+	    (locked_queue_bytes + locked_queue_rbytes + bytes <= LFS_WAIT_BYTES);
 
 #ifdef DEBUG
 	if (!count_fit) {
@@ -145,7 +146,7 @@
 }
 
 /* ARGSUSED */
-int
+static int
 lfs_reservebuf(struct lfs *fs, struct vnode *vp,
     struct vnode *vp2, int n, int bytes)
 {
@@ -170,6 +171,9 @@
 	locked_queue_rcount += n;
 	locked_queue_rbytes += bytes;
 
+	if (n < 0)
+		cv_broadcast(&locked_queue_cv);
+
 	mutex_exit(&lfs_lock);
 
 	KASSERT(locked_queue_rcount >= 0);
@@ -194,7 +198,7 @@
  * specific code so that each file systems can have their own vnode locking and
  * vnode re-using strategies.
  */
-int
+static int
 lfs_reserveavail(struct lfs *fs, struct vnode *vp,
     struct vnode *vp2, int fsb)
 {
@@ -330,8 +334,7 @@
 	/*
 	 * XXX just a guess. should be more precise.
 	 */
-	error = lfs_reservebuf(fs, vp, vp2,
-	    fragstoblks(fs, fsb), fsbtob(fs, fsb));
+	error = lfs_reservebuf(fs, vp, vp2, fsb, fsbtob(fs, fsb));
 	if (error)
 		lfs_reserveavail(fs, vp, vp2, -fsb);
 
@@ -374,7 +377,7 @@
 	ASSERT_NO_SEGLOCK(fs);
 	needed = fsb + btofsb(fs, fs->lfs_sumsize) +
 		 ((howmany(fs->lfs_uinodes + 1, INOPB(fs)) + fs->lfs_segtabsz +
-		   1) << (fs->lfs_blktodb - fs->lfs_fsbtodb));
+		   1) << (fs->lfs_bshift - fs->lfs_ffshift));
 
 	if (needed >= fs->lfs_avail) {
 #ifdef DEBUG
@@ -484,7 +487,7 @@
 	 * blocks.
 	 */
 	if ((bp->b_flags & B_LOCKED) == 0) {
-		fsb = fragstofsb(fs, numfrags(fs, bp->b_bcount));
+		fsb = numfrags(fs, bp->b_bcount);
 
 		ip = VTOI(vp);
 		mutex_enter(&lfs_lock);
@@ -703,8 +706,8 @@
 		wakeup(&lfs_writer_daemon);
 	}
 
-	while (locked_queue_count + INOCOUNT(fs) > LFS_WAIT_BUFS ||
-		locked_queue_bytes + INOBYTES(fs) > LFS_WAIT_BYTES ||
+	while (locked_queue_count + INOCOUNT(fs) >= LFS_WAIT_BUFS ||
+		locked_queue_bytes + INOBYTES(fs) >= LFS_WAIT_BYTES ||
 		lfs_subsys_pages > LFS_WAIT_PAGES ||
 		fs->lfs_dirvcount > LFS_MAX_FSDIROP(fs) ||
 		lfs_dirvcount > LFS_MAX_DIROP) {
@@ -724,8 +727,8 @@
 		 * and we weren't asked to checkpoint.	Try flushing again
 		 * to keep us from blocking indefinitely.
 		 */
-		if (locked_queue_count + INOCOUNT(fs) > LFS_MAX_BUFS ||
-		    locked_queue_bytes + INOBYTES(fs) > LFS_MAX_BYTES) {
+		if (locked_queue_count + INOCOUNT(fs) >= LFS_MAX_BUFS ||
+		    locked_queue_bytes + INOBYTES(fs) >= LFS_MAX_BYTES) {
 			lfs_flush(fs, flags | SEGM_CKP, 0);
 		}
 	}

Index: src/sys/ufs/lfs/lfs_inode.c
diff -u src/sys/ufs/lfs/lfs_inode.c:1.121 src/sys/ufs/lfs/lfs_inode.c:1.122
--- src/sys/ufs/lfs/lfs_inode.c:1.121	Sun Feb  7 17:12:40 2010
+++ src/sys/ufs/lfs/lfs_inode.c	Tue Feb 16 23:20:30 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: lfs_inode.c,v 1.121 2010/02/07 17:12:40 bouyer Exp $	*/
+/*	$NetBSD: lfs_inode.c,v 1.122 2010/02/16 23:20:30 mlelstv 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_inode.c,v 1.121 2010/02/07 17:12:40 bouyer Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_inode.c,v 1.122 2010/02/16 23:20:30 mlelstv Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_quota.h"
@@ -410,6 +410,7 @@
 
 	oip->i_size = oip->i_ffs1_size = length;
 	uvm_vnp_setsize(ovp, length);
+
 	/*
 	 * Calculate index into inode's block list of
 	 * last direct and indirect blocks (if any)

Index: src/sys/ufs/lfs/lfs_segment.c
diff -u src/sys/ufs/lfs/lfs_segment.c:1.214 src/sys/ufs/lfs/lfs_segment.c:1.215
--- src/sys/ufs/lfs/lfs_segment.c:1.214	Fri Aug  7 13:58:38 2009
+++ src/sys/ufs/lfs/lfs_segment.c	Tue Feb 16 23:20:30 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: lfs_segment.c,v 1.214 2009/08/07 13:58:38 wiz Exp $	*/
+/*	$NetBSD: lfs_segment.c,v 1.215 2010/02/16 23:20:30 mlelstv 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.214 2009/08/07 13:58:38 wiz Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_segment.c,v 1.215 2010/02/16 23:20:30 mlelstv Exp $");
 
 #ifdef DEBUG
 # define vndebug(vp, str) do {						\
@@ -123,7 +123,7 @@
  */
 #define	LFS_PARTIAL_FITS(fs) \
 	((fs)->lfs_fsbpseg - ((fs)->lfs_offset - (fs)->lfs_curseg) > \
-	fragstofsb((fs), (fs)->lfs_frag))
+	(fs)->lfs_frag)
 
 /*
  * Figure out whether we should do a checkpoint write or go ahead with
@@ -1448,7 +1448,7 @@
 	if (daddr > 0)
 		daddr = dbtofsb(fs, daddr);
 
-	bb = fragstofsb(fs, numfrags(fs, size));
+	bb = numfrags(fs, size);
 	switch (num) {
 	    case 0:
 		    ooff = ip->i_ffs1_db[lbn];
@@ -1655,7 +1655,7 @@
 		for (bytesleft = sbp->b_bcount; bytesleft > 0;
 		     bytesleft -= fs->lfs_bsize) {
 			size = MIN(bytesleft, fs->lfs_bsize);
-			bb = fragstofsb(fs, numfrags(fs, size));
+			bb = numfrags(fs, size);
 			lbn = *sp->start_lbp++;
 			lfs_update_single(fs, sp, sp->vp, lbn, fs->lfs_offset,
 			    size);
@@ -2548,7 +2548,7 @@
 			tbp->b_flags |= B_ASYNC;
 			/* Master buffers have BC_AGE */
 			if (tbp->b_private == tbp)
-				tbp->b_flags |= BC_AGE;
+				tbp->b_cflags |= BC_AGE;
 		}
 		mutex_exit(&bufcache_lock);
 

Index: src/sys/ufs/lfs/lfs_subr.c
diff -u src/sys/ufs/lfs/lfs_subr.c:1.73 src/sys/ufs/lfs/lfs_subr.c:1.74
--- src/sys/ufs/lfs/lfs_subr.c:1.73	Mon Apr 28 20:24:11 2008
+++ src/sys/ufs/lfs/lfs_subr.c	Tue Feb 16 23:20:30 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: lfs_subr.c,v 1.73 2008/04/28 20:24:11 martin Exp $	*/
+/*	$NetBSD: lfs_subr.c,v 1.74 2010/02/16 23:20:30 mlelstv 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_subr.c,v 1.73 2008/04/28 20:24:11 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_subr.c,v 1.74 2010/02/16 23:20:30 mlelstv Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -293,9 +293,9 @@
 	if (fs->lfs_seglock) {
 		if (fs->lfs_lockpid == curproc->p_pid &&
 		    fs->lfs_locklwp == curlwp->l_lid) {
-			mutex_exit(&lfs_lock);
 			++fs->lfs_seglock;
 			fs->lfs_sp->seg_flags |= flags;
+			mutex_exit(&lfs_lock);
 			return 0;
 		} else if (flags & SEGM_PAGEDAEMON) {
 			mutex_exit(&lfs_lock);
@@ -503,9 +503,11 @@
 		 * by a superblock completed.
 		 */
 		mutex_enter(&lfs_lock);
-		while (ckp && sync && fs->lfs_iocount)
+		while (ckp && sync && fs->lfs_iocount) {
 			(void)mtsleep(&fs->lfs_iocount, PRIBIO + 1,
 				      "lfs_iocount", 0, &lfs_lock);
+			DLOG((DLOG_SEG, "sleeping on iocount %x == %d\n", fs, fs->lfs_iocount));
+		}
 		while (sync && sp->seg_iocount) {
 			(void)mtsleep(&sp->seg_iocount, PRIBIO + 1,
 				     "seg_iocount", 0, &lfs_lock);

Index: src/sys/ufs/lfs/lfs_syscalls.c
diff -u src/sys/ufs/lfs/lfs_syscalls.c:1.135 src/sys/ufs/lfs/lfs_syscalls.c:1.136
--- src/sys/ufs/lfs/lfs_syscalls.c:1.135	Sun Sep 13 05:17:37 2009
+++ src/sys/ufs/lfs/lfs_syscalls.c	Tue Feb 16 23:20:30 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: lfs_syscalls.c,v 1.135 2009/09/13 05:17:37 tsutsui Exp $	*/
+/*	$NetBSD: lfs_syscalls.c,v 1.136 2010/02/16 23:20:30 mlelstv Exp $	*/
 
 /*-
  * Copyright (c) 1999, 2000, 2001, 2002, 2003, 2007, 2007, 2008
@@ -61,7 +61,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lfs_syscalls.c,v 1.135 2009/09/13 05:17:37 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_syscalls.c,v 1.136 2010/02/16 23:20:30 mlelstv Exp $");
 
 #ifndef LFS
 # define LFS		/* for prototypes in syscallargs.h */
@@ -247,7 +247,7 @@
 	if (fs->lfs_ronly)
 		return EROFS;
 
-	maxino = (fragstoblks(fs, fsbtofrags(fs, VTOI(fs->lfs_ivnode)->i_ffs1_blocks)) -
+	maxino = (fragstoblks(fs, VTOI(fs->lfs_ivnode)->i_ffs1_blocks) -
 		      fs->lfs_cleansz - fs->lfs_segtabsz) * fs->lfs_ifpb;
 
 	cnt = blkcnt;

Index: src/sys/ufs/lfs/lfs_vfsops.c
diff -u src/sys/ufs/lfs/lfs_vfsops.c:1.282 src/sys/ufs/lfs/lfs_vfsops.c:1.283
--- src/sys/ufs/lfs/lfs_vfsops.c:1.282	Fri Jan  8 11:35:12 2010
+++ src/sys/ufs/lfs/lfs_vfsops.c	Tue Feb 16 23:20:30 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: lfs_vfsops.c,v 1.282 2010/01/08 11:35:12 pooka Exp $	*/
+/*	$NetBSD: lfs_vfsops.c,v 1.283 2010/02/16 23:20:30 mlelstv Exp $	*/
 
 /*-
  * Copyright (c) 1999, 2000, 2001, 2002, 2003, 2007, 2007
@@ -61,7 +61,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lfs_vfsops.c,v 1.282 2010/01/08 11:35:12 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_vfsops.c,v 1.283 2010/02/16 23:20:30 mlelstv Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_lfs.h"
@@ -708,9 +708,8 @@
 	struct ufsmount *ump;
 	struct vnode *vp;
 	struct buf *bp, *abp;
-	struct partinfo dpart;
 	dev_t dev;
-	int error, i, ronly, secsize, fsbsize;
+	int error, i, ronly, fsbsize;
 	kauth_cred_t cred;
 	CLEANERINFO *cip;
 	SEGUSE *sup;
@@ -728,17 +727,13 @@
 		return (error);
 
 	ronly = (mp->mnt_flag & MNT_RDONLY) != 0;
-	if (VOP_IOCTL(devvp, DIOCGPART, &dpart, FREAD, cred) != 0)
-		secsize = DEV_BSIZE;
-	else
-		secsize = dpart.disklab->d_secsize;
 
 	/* Don't free random space on error. */
 	bp = NULL;
 	abp = NULL;
 	ump = NULL;
 
-	sb_addr = LFS_LABELPAD / secsize;
+	sb_addr = LFS_LABELPAD / DEV_BSIZE;
 	while (1) {
 		/* Read in the superblock. */
 		error = bread(devvp, sb_addr, LFS_SBPAD, cred, 0, &bp);
@@ -762,24 +757,20 @@
 		}
 
 		if (dfs->dlfs_version == 1)
-			fsbsize = secsize;
+			fsbsize = DEV_BSIZE;
 		else {
-			fsbsize = 1 << (dfs->dlfs_bshift - dfs->dlfs_blktodb +
-				dfs->dlfs_fsbtodb);
+			fsbsize = 1 << dfs->dlfs_ffshift;
 			/*
 			 * Could be, if the frag size is large enough, that we
 			 * don't have the "real" primary superblock.  If that's
 			 * the case, get the real one, and try again.
 			 */
-			if (sb_addr != dfs->dlfs_sboffs[0] <<
-				       dfs->dlfs_fsbtodb) {
+			if (sb_addr != (dfs->dlfs_sboffs[0] << (dfs->dlfs_ffshift - DEV_BSHIFT))) {
 				DLOG((DLOG_MOUNT, "lfs_mountfs: sb daddr"
 				      " 0x%llx is not right, trying 0x%llx\n",
 				      (long long)sb_addr,
-				      (long long)(dfs->dlfs_sboffs[0] <<
-						  dfs->dlfs_fsbtodb)));
-				sb_addr = dfs->dlfs_sboffs[0] <<
-					  dfs->dlfs_fsbtodb;
+				      (long long)(dfs->dlfs_sboffs[0] << (dfs->dlfs_ffshift - DEV_BSHIFT))));
+				sb_addr = dfs->dlfs_sboffs[0] << (dfs->dlfs_ffshift - DEV_BSHIFT);
 				brelse(bp, 0);
 				continue;
 			}
@@ -796,7 +787,7 @@
 	if (dfs->dlfs_sboffs[1] &&
 	    dfs->dlfs_sboffs[1] - LFS_LABELPAD / fsbsize > LFS_SBPAD / fsbsize)
 	{
-		error = bread(devvp, dfs->dlfs_sboffs[1] * (fsbsize / secsize),
+		error = bread(devvp, dfs->dlfs_sboffs[1] * (fsbsize / DEV_BSIZE),
 			LFS_SBPAD, cred, 0, &abp);
 		if (error)
 			goto out;
@@ -886,7 +877,7 @@
 
 
 	/* Set up the I/O information */
-	fs->lfs_devbsize = secsize;
+	fs->lfs_devbsize = DEV_BSIZE;
 	fs->lfs_iocount = 0;
 	fs->lfs_diropwait = 0;
 	fs->lfs_activesb = 0;
@@ -927,8 +918,8 @@
 	ump->um_mountp = mp;
 	ump->um_dev = dev;
 	ump->um_devvp = devvp;
-	ump->um_bptrtodb = fs->lfs_fsbtodb;
-	ump->um_seqinc = fragstofsb(fs, fs->lfs_frag);
+	ump->um_bptrtodb = fs->lfs_ffshift - DEV_BSHIFT;
+	ump->um_seqinc = fs->lfs_frag;
 	ump->um_nindir = fs->lfs_nindir;
 	ump->um_lognindir = ffs(fs->lfs_nindir) - 1;
 	for (i = 0; i < MAXQUOTAS; i++)
@@ -1184,16 +1175,16 @@
 	sbp->f_bsize = fs->lfs_bsize;
 	sbp->f_frsize = fs->lfs_fsize;
 	sbp->f_iosize = fs->lfs_bsize;
-	sbp->f_blocks = fsbtofrags(fs, LFS_EST_NONMETA(fs) - VTOI(fs->lfs_ivnode)->i_lfs_effnblks);
+	sbp->f_blocks = LFS_EST_NONMETA(fs) - VTOI(fs->lfs_ivnode)->i_lfs_effnblks;
 
-	sbp->f_bfree = fsbtofrags(fs, LFS_EST_BFREE(fs));
+	sbp->f_bfree = LFS_EST_BFREE(fs);
 	KASSERT(sbp->f_bfree <= fs->lfs_dsize);
 #if 0
 	if (sbp->f_bfree < 0)
 		sbp->f_bfree = 0;
 #endif
 
-	sbp->f_bresvd = fsbtofrags(fs, LFS_EST_RSVD(fs));
+	sbp->f_bresvd = LFS_EST_RSVD(fs);
 	if (sbp->f_bfree > sbp->f_bresvd)
 		sbp->f_bavail = sbp->f_bfree - sbp->f_bresvd;
 	else

Reply via email to