Module Name:    src
Committed By:   matt
Date:           Wed Apr 21 05:26:35 UTC 2010

Modified Files:
        src/sbin/atactl [matt-nb5-mips64]: atactl.c
        src/sbin/dkctl [matt-nb5-mips64]: dkctl.8 dkctl.c
        src/sbin/drvctl [matt-nb5-mips64]: drvctl.8 drvctl.c
        src/sbin/fdisk [matt-nb5-mips64]: fdisk.c
        src/sbin/fsck_ext2fs [matt-nb5-mips64]: main.c
        src/sbin/fsck_ffs [matt-nb5-mips64]: extern.h setup.c wapbl.c
        src/sbin/ifconfig [matt-nb5-mips64]: af_link.c ifconfig.8 ifconfig.c
            parse.c util.c util.h vlan.c
        src/sbin/newfs [matt-nb5-mips64]: newfs.c
        src/sbin/newfs_msdos [matt-nb5-mips64]: newfs_msdos.c
        src/sbin/newfs_udf [matt-nb5-mips64]: newfs_udf.8 udf_create.c
        src/sbin/ping [matt-nb5-mips64]: ping.c
        src/sbin/raidctl [matt-nb5-mips64]: raidctl.8 raidctl.c
        src/sbin/savecore [matt-nb5-mips64]: savecore.c
        src/sbin/tunefs [matt-nb5-mips64]: tunefs.c
        src/sbin/wsconsctl [matt-nb5-mips64]: wsconsctl.8

Log Message:
sync to netbsd-5


To generate a diff of this commit:
cvs rdiff -u -r1.52 -r1.52.8.1 src/sbin/atactl/atactl.c
cvs rdiff -u -r1.17 -r1.17.32.1 src/sbin/dkctl/dkctl.8
cvs rdiff -u -r1.16 -r1.16.32.1 src/sbin/dkctl/dkctl.c
cvs rdiff -u -r1.5 -r1.5.16.1 src/sbin/drvctl/drvctl.8
cvs rdiff -u -r1.6 -r1.6.16.1 src/sbin/drvctl/drvctl.c
cvs rdiff -u -r1.116.6.1 -r1.116.6.1.4.1 src/sbin/fdisk/fdisk.c
cvs rdiff -u -r1.32 -r1.32.8.1 src/sbin/fsck_ext2fs/main.c
cvs rdiff -u -r1.24 -r1.24.8.1 src/sbin/fsck_ffs/extern.h
cvs rdiff -u -r1.84 -r1.84.8.1 src/sbin/fsck_ffs/setup.c
cvs rdiff -u -r1.2 -r1.2.10.1 src/sbin/fsck_ffs/wapbl.c
cvs rdiff -u -r1.3 -r1.3.8.1 src/sbin/ifconfig/af_link.c
cvs rdiff -u -r1.94 -r1.94.8.1 src/sbin/ifconfig/ifconfig.8
cvs rdiff -u -r1.213.2.1 -r1.213.2.1.4.1 src/sbin/ifconfig/ifconfig.c
cvs rdiff -u -r1.12 -r1.12.6.1 src/sbin/ifconfig/parse.c
cvs rdiff -u -r1.8 -r1.8.6.1 src/sbin/ifconfig/util.c
cvs rdiff -u -r1.6 -r1.6.8.1 src/sbin/ifconfig/util.h
cvs rdiff -u -r1.12 -r1.12.8.1 src/sbin/ifconfig/vlan.c
cvs rdiff -u -r1.102 -r1.102.8.1 src/sbin/newfs/newfs.c
cvs rdiff -u -r1.27.2.2 -r1.27.2.2.4.1 src/sbin/newfs_msdos/newfs_msdos.c
cvs rdiff -u -r1.4.4.1 -r1.4.4.1.4.1 src/sbin/newfs_udf/newfs_udf.8
cvs rdiff -u -r1.12.4.2 -r1.12.4.2.4.1 src/sbin/newfs_udf/udf_create.c
cvs rdiff -u -r1.87 -r1.87.16.1 src/sbin/ping/ping.c
cvs rdiff -u -r1.56 -r1.56.8.1 src/sbin/raidctl/raidctl.8
cvs rdiff -u -r1.39.4.1 -r1.39.4.1.4.1 src/sbin/raidctl/raidctl.c
cvs rdiff -u -r1.76.2.1 -r1.76.2.1.4.1 src/sbin/savecore/savecore.c
cvs rdiff -u -r1.37 -r1.37.8.1 src/sbin/tunefs/tunefs.c
cvs rdiff -u -r1.25.6.1 -r1.25.6.1.2.1 src/sbin/wsconsctl/wsconsctl.8

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

Modified files:

Index: src/sbin/atactl/atactl.c
diff -u src/sbin/atactl/atactl.c:1.52 src/sbin/atactl/atactl.c:1.52.8.1
--- src/sbin/atactl/atactl.c:1.52	Mon Aug 25 00:45:56 2008
+++ src/sbin/atactl/atactl.c	Wed Apr 21 05:26:33 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: atactl.c,v 1.52 2008/08/25 00:45:56 dholland Exp $	*/
+/*	$NetBSD: atactl.c,v 1.52.8.1 2010/04/21 05:26:33 matt Exp $	*/
 
 /*-
  * Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
 #include <sys/cdefs.h>
 
 #ifndef lint
-__RCSID("$NetBSD: atactl.c,v 1.52 2008/08/25 00:45:56 dholland Exp $");
+__RCSID("$NetBSD: atactl.c,v 1.52.8.1 2010/04/21 05:26:33 matt Exp $");
 #endif
 
 
@@ -856,9 +856,9 @@
 device_identify(int argc, char *argv[])
 {
 	struct ataparams *inqbuf;
-	char model[sizeof(inqbuf->atap_model)];
-	char revision[sizeof(inqbuf->atap_revision)];
-	char serial[sizeof(inqbuf->atap_serial)];
+	char model[sizeof(inqbuf->atap_model)+1];
+	char revision[sizeof(inqbuf->atap_revision)+1];
+	char serial[sizeof(inqbuf->atap_serial)+1];
 	int needswap = 0;
 
 	/* No arguments. */

Index: src/sbin/dkctl/dkctl.8
diff -u src/sbin/dkctl/dkctl.8:1.17 src/sbin/dkctl/dkctl.8:1.17.32.1
--- src/sbin/dkctl/dkctl.8:1.17	Thu Jan 12 20:28:29 2006
+++ src/sbin/dkctl/dkctl.8	Wed Apr 21 05:26:33 2010
@@ -1,4 +1,4 @@
-.\"	$NetBSD: dkctl.8,v 1.17 2006/01/12 20:28:29 wiz Exp $
+.\"	$NetBSD: dkctl.8,v 1.17.32.1 2010/04/21 05:26:33 matt Exp $
 .\"
 .\" Copyright 2002 Wasabi Systems, Inc.
 .\" All rights reserved.
@@ -33,7 +33,7 @@
 .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 .\" POSSIBILITY OF SUCH DAMAGE.
 .\"
-.Dd December 26, 2005
+.Dd July 30, 2009
 .Dt DKCTL 8
 .Os
 .Sh NAME
@@ -118,6 +118,24 @@
 .Ar name
 and the partition type
 .Ar ptype .
+Valid choices for ptype would be
+.Ar unused ,
+.Ar swap ,
+.Ar ffs ,
+.Ar lfs ,
+.Ar ext2fs ,
+.Ar cd9660 ,
+.Ar ados ,
+.Ar hfs ,
+.Ar msdos ,
+.Ar filecore ,
+.Ar raidframe ,
+.Ar ccd ,
+.Ar appleufs ,
+.Ar ntfs ,
+and
+.Ar cgd .
+.Pp
 The device name of the virtual block device assigned to the wedge will be
 displayed after the wedge has been successfully created.
 See

Index: src/sbin/dkctl/dkctl.c
diff -u src/sbin/dkctl/dkctl.c:1.16 src/sbin/dkctl/dkctl.c:1.16.32.1
--- src/sbin/dkctl/dkctl.c:1.16	Sat Jun 17 02:16:19 2006
+++ src/sbin/dkctl/dkctl.c	Wed Apr 21 05:26:33 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: dkctl.c,v 1.16 2006/06/17 02:16:19 christos Exp $	*/
+/*	$NetBSD: dkctl.c,v 1.16.32.1 2010/04/21 05:26:33 matt Exp $	*/
 
 /*
  * Copyright 2001 Wasabi Systems, Inc.
@@ -41,7 +41,7 @@
 #include <sys/cdefs.h>
 
 #ifndef lint
-__RCSID("$NetBSD: dkctl.c,v 1.16 2006/06/17 02:16:19 christos Exp $");
+__RCSID("$NetBSD: dkctl.c,v 1.16.32.1 2010/04/21 05:26:33 matt Exp $");
 #endif
 
 
@@ -533,6 +533,9 @@
 
 	if (ioctl(fd, DIOCAWEDGE, &dkw) == -1)
 		err(1, "%s: addwedge", dvname);
+	else
+		printf("%s created successfully.\n", dkw.dkw_devname);
+
 }
 
 void

Index: src/sbin/drvctl/drvctl.8
diff -u src/sbin/drvctl/drvctl.8:1.5 src/sbin/drvctl/drvctl.8:1.5.16.1
--- src/sbin/drvctl/drvctl.8:1.5	Sat Feb 16 02:00:37 2008
+++ src/sbin/drvctl/drvctl.8	Wed Apr 21 05:26:33 2010
@@ -1,4 +1,4 @@
-.\" $NetBSD: drvctl.8,v 1.5 2008/02/16 02:00:37 dyoung Exp $
+.\" $NetBSD: drvctl.8,v 1.5.16.1 2010/04/21 05:26:33 matt Exp $
 .\"
 .\" Copyright (c) 2004
 .\" 	Matthias Drochner.  All rights reserved.
@@ -24,7 +24,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.Dd Feburary 15, 2008
+.Dd April 20, 2009
 .Dt DRVCTL 8
 .Os
 .Sh NAME
@@ -40,8 +40,9 @@
 .Fl d
 .Ar device
 .Nm
+.Op Fl n
 .Fl l
-.Ar device
+.Op Ar device
 .Nm
 .Fl p
 .Ar device
@@ -78,6 +79,22 @@
 List the children of the device specified by the
 .Ar device
 argument.
+If
+.Ar device
+is not specified, list roots of the device tree instead.
+Output comes in two columns.
+The first column is
+.Ar device ,
+or
+.Dq root
+if
+.Ar device
+is not specified.
+The second column is the child.
+.It Fl n
+Suppress first column in
+.Fl l
+output.
 .It Fl p
 Get the properties for the device specified by the
 .Ar device

Index: src/sbin/drvctl/drvctl.c
diff -u src/sbin/drvctl/drvctl.c:1.6 src/sbin/drvctl/drvctl.c:1.6.16.1
--- src/sbin/drvctl/drvctl.c:1.6	Sun Jan 27 01:38:33 2008
+++ src/sbin/drvctl/drvctl.c	Wed Apr 21 05:26:33 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: drvctl.c,v 1.6 2008/01/27 01:38:33 dyoung Exp $ */
+/* $NetBSD: drvctl.c,v 1.6.16.1 2010/04/21 05:26:33 matt Exp $ */
 
 /*
  * Copyright (c) 2004
@@ -26,6 +26,7 @@
  * SUCH DAMAGE.
  */
 
+#include <stdbool.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
@@ -35,7 +36,7 @@
 #include <sys/ioctl.h>
 #include <sys/drvctlio.h>
 
-#define OPTS "QRSa:dlpr"
+#define OPTS "QRSa:dlnpr"
 
 #define	OPEN_MODE(mode)							\
 	(((mode) == 'd' || (mode) == 'r') ? O_RDWR			\
@@ -49,7 +50,7 @@
 
 	fprintf(stderr, "Usage: %s -r [-a attribute] busdevice [locator ...]\n"
 	    "       %s -d device\n"
-	    "       %s -l device\n"
+	    "       %s [-n] -l [device]\n"
 	    "       %s -p device\n"
 	    "       %s -Q device\n"
 	    "       %s -R device\n"
@@ -62,6 +63,7 @@
 int
 main(int argc, char **argv)
 {
+	bool nflag = false;
 	int c, mode;
 	char *attr = 0;
 	extern char *optarg;
@@ -95,6 +97,9 @@
 		case 'a':
 			attr = optarg;
 			break;
+		case 'n':
+			nflag = true;
+			break;
 		case '?':
 		default:
 			usage();
@@ -104,7 +109,7 @@
 	argc -= optind;
 	argv += optind;
 
-	if (argc < 1 || mode == 0)
+	if ((argc < 1 && mode != 'l') || mode == 0)
 		usage();
 
 	fd = open(DRVCTLDEV, OPEN_MODE(mode), 0);
@@ -134,7 +139,10 @@
 			err(3, "DRVDETACHDEV");
 		break;
 	case 'l':
-		strlcpy(laa.l_devname, argv[0], sizeof(laa.l_devname));
+		if (argc == 0)
+			*laa.l_devname = '\0';
+		else
+			strlcpy(laa.l_devname, argv[0], sizeof(laa.l_devname));
 
 		if (ioctl(fd, DRVLISTDEV, &laa) == -1)
 			err(3, "DRVLISTDEV");
@@ -149,8 +157,13 @@
 		if (laa.l_children > children)
 			err(6, "DRVLISTDEV: number of children grew");
 
-		for (i = 0; i < laa.l_children; i++)
-			printf("%s %s\n", laa.l_devname, laa.l_childname[i]);
+		for (i = 0; i < (int)laa.l_children; i++) {
+			if (!nflag) {
+				printf("%s ",
+				    (argc == 0) ? "root" : laa.l_devname);
+			}
+			printf("%s\n", laa.l_childname[i]);
+		}
 		break;
 	case 'r':
 		memset(&raa, 0, sizeof(raa));

Index: src/sbin/fdisk/fdisk.c
diff -u src/sbin/fdisk/fdisk.c:1.116.6.1 src/sbin/fdisk/fdisk.c:1.116.6.1.4.1
--- src/sbin/fdisk/fdisk.c:1.116.6.1	Mon Apr 20 23:16:45 2009
+++ src/sbin/fdisk/fdisk.c	Wed Apr 21 05:26:33 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: fdisk.c,v 1.116.6.1 2009/04/20 23:16:45 snj Exp $ */
+/*	$NetBSD: fdisk.c,v 1.116.6.1.4.1 2010/04/21 05:26:33 matt Exp $ */
 
 /*
  * Mach Operating System
@@ -39,7 +39,7 @@
 #include <sys/cdefs.h>
 
 #ifndef lint
-__RCSID("$NetBSD: fdisk.c,v 1.116.6.1 2009/04/20 23:16:45 snj Exp $");
+__RCSID("$NetBSD: fdisk.c,v 1.116.6.1.4.1 2010/04/21 05:26:33 matt Exp $");
 #endif /* not lint */
 
 #define MBRPTYPENAMES
@@ -246,7 +246,7 @@
 int	read_s0(daddr_t, struct mbr_sector *);
 int	write_mbr(void);
 int	yesno(const char *, ...);
-int	decimal(const char *, int, int, int, int);
+int64_t	decimal(const char *, int64_t, int, int64_t, int64_t);
 #define DEC_SEC		1		/* asking for a sector number */
 #define	DEC_RND		2		/* round to end of first track */
 #define	DEC_RND_0	4		/* round 0 to size of a track */
@@ -2618,20 +2618,20 @@
 	return (first == 'y' || first == 'Y');
 }
 
-int
-decimal(const char *prompt, int dflt, int flags, int minval, int maxval)
+int64_t
+decimal(const char *prompt, int64_t dflt, int flags, int64_t minval, int64_t maxval)
 {
-	int acc = 0;
+	int64_t acc = 0;
 	char *cp;
 	char ch;
 
 	for (;;) {
 		if (flags & DEC_SEC) {
-			printf("%s: [%d..%dcyl default: %d, %dcyl, %uMB] ",
+			printf("%s: [%" PRId64 "..%" PRId64 "dcyl default: %" PRId64 ", %" PRId64 "dcyl, %uMB] ",
 			    prompt, SEC_TO_CYL(minval), SEC_TO_CYL(maxval),
 			    dflt, SEC_TO_CYL(dflt), SEC_TO_MB(dflt));
 		} else
-			printf("%s: [%d..%d default: %d] ",
+			printf("%s: [%" PRId64 "..%" PRId64 " default: %" PRId64 "] ",
 			    prompt, minval, maxval, dflt);
 
 		if (!fgets(lbuf, LBUF, stdin))
@@ -2647,7 +2647,7 @@
 			return maxval;
 
 		if (isdigit((unsigned char)*cp) || *cp == '-') {
-			acc = strtol(lbuf, &cp, 10);
+			acc = strtoll(lbuf, &cp, 10);
 			if (flags & DEC_SEC) {
 				ch = *cp;
 				if (ch == 'g' || ch == 'G') {
@@ -2686,7 +2686,7 @@
 
 		if (acc >= minval && acc <= maxval)
 			return acc;
-		printf("%d is not between %d and %d.\n", acc, minval, maxval);
+		printf("%" PRId64 " is not between %" PRId64 " and %" PRId64 ".\n", acc, minval, maxval);
 	}
 }
 

Index: src/sbin/fsck_ext2fs/main.c
diff -u src/sbin/fsck_ext2fs/main.c:1.32 src/sbin/fsck_ext2fs/main.c:1.32.8.1
--- src/sbin/fsck_ext2fs/main.c:1.32	Sun Oct 12 20:49:43 2008
+++ src/sbin/fsck_ext2fs/main.c	Wed Apr 21 05:26:34 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: main.c,v 1.32 2008/10/12 20:49:43 wiz Exp $	*/
+/*	$NetBSD: main.c,v 1.32.8.1 2010/04/21 05:26:34 matt Exp $	*/
 
 /*
  * Copyright (c) 1980, 1986, 1993
@@ -68,7 +68,7 @@
 #if 0
 static char sccsid[] = "@(#)main.c	8.2 (Berkeley) 1/23/94";
 #else
-__RCSID("$NetBSD: main.c,v 1.32 2008/10/12 20:49:43 wiz Exp $");
+__RCSID("$NetBSD: main.c,v 1.32.8.1 2010/04/21 05:26:34 matt Exp $");
 #endif
 #endif /* not lint */
 
@@ -107,7 +107,7 @@
 
 	sync();
 	skipclean = 1;
-	while ((ch = getopt(argc, argv, "b:dfm:npqUy")) != -1) {
+	while ((ch = getopt(argc, argv, "b:dfm:npPqUy")) != -1) {
 		switch (ch) {
 		case 'b':
 			skipclean = 0;

Index: src/sbin/fsck_ffs/extern.h
diff -u src/sbin/fsck_ffs/extern.h:1.24 src/sbin/fsck_ffs/extern.h:1.24.8.1
--- src/sbin/fsck_ffs/extern.h:1.24	Sat Aug 30 10:46:16 2008
+++ src/sbin/fsck_ffs/extern.h	Wed Apr 21 05:26:34 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: extern.h,v 1.24 2008/08/30 10:46:16 bouyer Exp $	*/
+/*	$NetBSD: extern.h,v 1.24.8.1 2010/04/21 05:26:34 matt Exp $	*/
 
 /*
  * Copyright (c) 1994 James A. Jegers
@@ -82,6 +82,7 @@
 int		setup(const char *, const char *);
 void		voidquit(int);
 
+int		check_wapbl(void);
 void		replay_wapbl(void);
 void		cleanup_wapbl(void);
 int		read_wapbl(char *, long, daddr_t);

Index: src/sbin/fsck_ffs/setup.c
diff -u src/sbin/fsck_ffs/setup.c:1.84 src/sbin/fsck_ffs/setup.c:1.84.8.1
--- src/sbin/fsck_ffs/setup.c:1.84	Sat Aug 30 10:46:16 2008
+++ src/sbin/fsck_ffs/setup.c	Wed Apr 21 05:26:34 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: setup.c,v 1.84 2008/08/30 10:46:16 bouyer Exp $	*/
+/*	$NetBSD: setup.c,v 1.84.8.1 2010/04/21 05:26:34 matt Exp $	*/
 
 /*
  * Copyright (c) 1980, 1986, 1993
@@ -34,7 +34,7 @@
 #if 0
 static char sccsid[] = "@(#)setup.c	8.10 (Berkeley) 5/9/95";
 #else
-__RCSID("$NetBSD: setup.c,v 1.84 2008/08/30 10:46:16 bouyer Exp $");
+__RCSID("$NetBSD: setup.c,v 1.84.8.1 2010/04/21 05:26:34 matt Exp $");
 #endif
 #endif /* not lint */
 
@@ -173,24 +173,35 @@
 		doskipclean = 0;
 		pwarn("USING ALTERNATE SUPERBLOCK AT %d\n", bflag);
 	}
-	if (sblock->fs_flags & FS_DOWAPBL) {
-		if (preen) {
+	/* ffs_superblock_layout() == 2 */
+	if (sblock->fs_magic != FS_UFS1_MAGIC ||
+	    (sblock->fs_old_flags & FS_FLAGS_UPDATED) != 0) {
+		/* can have WAPBL */
+		if (check_wapbl() != 0) {
+			doskipclean = 0;
+		}
+		if (sblock->fs_flags & FS_DOWAPBL) {
+			if (preen) {
+				if (!quiet)
+					pwarn("file system is journaled; "
+					    "not checking\n");
+				return (-1);
+			}
 			if (!quiet)
-				pwarn("file system is journaled; not checking\n");
-			return (-1);
+				pwarn("** File system is journaled; "
+				    "replaying journal\n");
+			replay_wapbl();
+			doskipclean = 0;
+			sblock->fs_flags &= ~FS_DOWAPBL;
+			sbdirty();
+			/* Although we may have updated the superblock from
+			 * the journal, we are still going to do a full check,
+			 * so we don't bother to re-read the superblock from
+			 * the journal.
+			 * XXX, instead we could re-read the superblock and
+			 * then not force doskipclean = 0 
+			 */
 		}
-		if (!quiet)
-			pwarn("** File system is journaled; replaying journal\n");
-		replay_wapbl();
-		doskipclean = 0;
-		sblock->fs_flags &= ~FS_DOWAPBL;
-		sbdirty();
-		/* Although we may have updated the superblock from the
-		 * journal, we are still going to do a full check, so we
-		 * don't bother to re-read the superblock from the journal.
-		 * XXX, instead we could re-read the superblock and then not
-		 * force doskipclean = 0 
-		 */
 	}
 	if (debug)
 		printf("clean = %d\n", sblock->fs_clean);

Index: src/sbin/fsck_ffs/wapbl.c
diff -u src/sbin/fsck_ffs/wapbl.c:1.2 src/sbin/fsck_ffs/wapbl.c:1.2.10.1
--- src/sbin/fsck_ffs/wapbl.c:1.2	Thu Jul 31 05:38:04 2008
+++ src/sbin/fsck_ffs/wapbl.c	Wed Apr 21 05:26:34 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: wapbl.c,v 1.2 2008/07/31 05:38:04 simonb Exp $	*/
+/*	$NetBSD: wapbl.c,v 1.2.10.1 2010/04/21 05:26:34 matt Exp $	*/
 
 /*-
  * Copyright (c) 2005,2008 The NetBSD Foundation, Inc.
@@ -33,7 +33,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: wapbl.c,v 1.2 2008/07/31 05:38:04 simonb Exp $");
+__KERNEL_RCSID(0, "$NetBSD: wapbl.c,v 1.2.10.1 2010/04/21 05:26:34 matt Exp $");
 
 #include <sys/stat.h>
 #include <sys/time.h>
@@ -89,60 +89,8 @@
 void
 replay_wapbl(void)
 {
-	uint64_t addr, count, blksize;
 	int error;
 
-	if (debug)
-		wapbl_debug_print = WAPBL_PRINT_ERROR | WAPBL_PRINT_REPLAY;
-	if (debug > 1)
-		wapbl_debug_print |= WAPBL_PRINT_IO;
-
-	if (sblock->fs_journal_version != UFS_WAPBL_VERSION) {
-		pfatal("INVALID JOURNAL VERSION %d",
-		    sblock->fs_journal_version);
-		if (reply("CONTINUE") == 0) {
-			exit(FSCK_EXIT_CHECK_FAILED);
-		}
-		return;
-	}
-
-	switch (sblock->fs_journal_location) {
-	case UFS_WAPBL_JOURNALLOC_NONE:
-		pfatal("INVALID JOURNAL LOCATION 'NONE'");
-		if (reply("CONTINUE") == 0) {
-			exit(FSCK_EXIT_CHECK_FAILED);
-		}
-		return;
-
-	case UFS_WAPBL_JOURNALLOC_END_PARTITION:
-		addr = sblock->fs_journallocs[UFS_WAPBL_EPART_ADDR];
-		count = sblock->fs_journallocs[UFS_WAPBL_EPART_COUNT];
-		blksize = sblock->fs_journallocs[UFS_WAPBL_EPART_BLKSZ];
-		break;
-
-	case UFS_WAPBL_JOURNALLOC_IN_FILESYSTEM:
-		addr = sblock->fs_journallocs[UFS_WAPBL_INFS_ADDR];
-		count = sblock->fs_journallocs[UFS_WAPBL_INFS_COUNT];
-		blksize = sblock->fs_journallocs[UFS_WAPBL_INFS_BLKSZ];
-		break;
-
-	default:
-		pfatal("INVALID JOURNAL LOCATION %d",
-		    sblock->fs_journal_location);
-		if (reply("CONTINUE") == 0) {
-			exit(FSCK_EXIT_CHECK_FAILED);
-		}
-		return;
-	}
-
-	error = wapbl_replay_start(&wapbl_replay, 0, addr, count, blksize);
-	if (error) {
-		pfatal("UNABLE TO READ JOURNAL FOR REPLAY");
-		if (reply("CONTINUE") == 0) {
-			exit(FSCK_EXIT_CHECK_FAILED);
-		}
-		return;
-	}
 	if (!nflag) {
 		error = wapbl_replay_write(wapbl_replay, 0);
 		if (error) {
@@ -200,3 +148,125 @@
 
 	return 0;
 }
+
+int
+check_wapbl(void)
+{
+	uint64_t addr = 0, count = 0, blksize = 0;
+	int error;
+	int ret = 0;
+	if (debug)
+		wapbl_debug_print = WAPBL_PRINT_ERROR | WAPBL_PRINT_REPLAY;
+	if (debug > 1)
+		wapbl_debug_print |= WAPBL_PRINT_IO;
+
+	if (sblock->fs_flags & FS_DOWAPBL) {
+		if (sblock->fs_journal_version != UFS_WAPBL_VERSION) {
+			pfatal("INVALID JOURNAL VERSION %d",
+			    sblock->fs_journal_version);
+			if (reply("CONTINUE") == 0) {
+				exit(FSCK_EXIT_CHECK_FAILED);
+			}
+			pwarn("CLEARING EXISTING JOURNAL\n");
+			sblock->fs_flags &= ~FS_DOWAPBL;
+			sbdirty();
+			ret = FSCK_EXIT_CHECK_FAILED;
+		} else {
+			switch(sblock->fs_journal_location) {
+			case UFS_WAPBL_JOURNALLOC_END_PARTITION:
+				addr =
+				  sblock->fs_journallocs[UFS_WAPBL_EPART_ADDR];
+				count =
+				  sblock->fs_journallocs[UFS_WAPBL_EPART_COUNT];
+				blksize =
+				  sblock->fs_journallocs[UFS_WAPBL_EPART_BLKSZ];
+				break;
+			case UFS_WAPBL_JOURNALLOC_IN_FILESYSTEM:
+				addr =
+				  sblock->fs_journallocs[UFS_WAPBL_INFS_ADDR];
+				count =
+				  sblock->fs_journallocs[UFS_WAPBL_INFS_COUNT];
+				blksize =
+				  sblock->fs_journallocs[UFS_WAPBL_INFS_BLKSZ];
+				break;
+			default:
+				pfatal("INVALID JOURNAL LOCATION %d",
+				    sblock->fs_journal_location);
+				if (reply("CONTINUE") == 0) {
+					exit(FSCK_EXIT_CHECK_FAILED);
+				}
+				pwarn("CLEARING EXISTING JOURNAL\n");
+				sblock->fs_flags &= ~FS_DOWAPBL;
+				sblock->fs_journal_location =
+				    UFS_WAPBL_JOURNALLOC_NONE;
+				sbdirty();
+				ret = FSCK_EXIT_CHECK_FAILED;
+				break;
+			}
+			if (sblock->fs_flags & FS_DOWAPBL) {
+				error = wapbl_replay_start(
+				    &wapbl_replay, 0, addr, count, blksize);
+				if (error) {
+					pfatal(
+					   "UNABLE TO READ JOURNAL FOR REPLAY");
+					if (reply("CONTINUE") == 0) {
+						exit(FSCK_EXIT_CHECK_FAILED);
+					}
+					pwarn("CLEARING EXISTING JOURNAL\n");
+					sblock->fs_flags &= ~FS_DOWAPBL;
+					sbdirty();
+					ret = FSCK_EXIT_CHECK_FAILED;
+				}
+			}
+		}
+	}
+	/*
+	 * at this time fs_journal_flags can only be 0,
+	 * UFS_WAPBL_FLAGS_CREATE_LOG or UFS_WAPBL_FLAGS_CLEAR_LOG.
+	 * We can't have both flags at the same time.
+	 */
+	switch (sblock->fs_journal_flags) {
+	case 0:
+		break;
+	case UFS_WAPBL_FLAGS_CREATE_LOG:
+	case UFS_WAPBL_FLAGS_CLEAR_LOG:
+		switch(sblock->fs_journal_location) {
+		case UFS_WAPBL_JOURNALLOC_END_PARTITION:
+		case UFS_WAPBL_JOURNALLOC_IN_FILESYSTEM:
+			break;
+		case UFS_WAPBL_JOURNALLOC_NONE:
+			if (sblock->fs_journal_flags ==
+			    UFS_WAPBL_FLAGS_CLEAR_LOG)
+				break;
+			/* FALLTHROUGH */
+		default:
+			pfatal("INVALID JOURNAL LOCATION %d",
+			    sblock->fs_journal_location);
+			if (reply("CONTINUE") == 0) {
+				exit(FSCK_EXIT_CHECK_FAILED);
+			}
+			pwarn("CLEARING JOURNAL FLAGS\n");
+			sblock->fs_journal_flags = 0;
+			sblock->fs_journal_location =
+			    UFS_WAPBL_JOURNALLOC_NONE;
+			sbdirty();
+			ret = FSCK_EXIT_CHECK_FAILED;
+			break;
+		}
+		break;
+	default:
+		pfatal("INVALID JOURNAL FLAGS %d",
+		    sblock->fs_journal_flags);
+		if (reply("CONTINUE") == 0) {
+			exit(FSCK_EXIT_CHECK_FAILED);
+		}
+		pwarn("CLEARING JOURNAL FLAGS\n");
+		sblock->fs_journal_flags = 0;
+		sblock->fs_journal_location =
+		    UFS_WAPBL_JOURNALLOC_NONE;
+		sbdirty();
+		ret = FSCK_EXIT_CHECK_FAILED;
+		break;
+	}
+	return ret;
+}

Index: src/sbin/ifconfig/af_link.c
diff -u src/sbin/ifconfig/af_link.c:1.3 src/sbin/ifconfig/af_link.c:1.3.8.1
--- src/sbin/ifconfig/af_link.c:1.3	Wed Jul  2 07:44:14 2008
+++ src/sbin/ifconfig/af_link.c	Wed Apr 21 05:26:34 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: af_link.c,v 1.3 2008/07/02 07:44:14 dyoung Exp $	*/
+/*	$NetBSD: af_link.c,v 1.3.8.1 2010/04/21 05:26:34 matt Exp $	*/
 
 /*-
  * Copyright (c) 2008 David Young.  All rights reserved.
@@ -27,7 +27,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: af_link.c,v 1.3 2008/07/02 07:44:14 dyoung Exp $");
+__RCSID("$NetBSD: af_link.c,v 1.3.8.1 2010/04/21 05:26:34 matt Exp $");
 #endif /* not lint */
 
 #include <sys/param.h> 
@@ -74,56 +74,7 @@
 static void
 link_status(prop_dictionary_t env, prop_dictionary_t oenv, bool force)
 {
-	const char *delim, *ifname;
-	int i, s;
-	struct ifaddrs *ifa, *ifap;
-	const struct sockaddr_dl *sdl;
-	struct if_laddrreq iflr;
-	const uint8_t *octets;
-
-	if ((ifname = getifname(env)) == NULL)
-		err(EXIT_FAILURE, "%s: getifname", __func__);
-
-	if ((s = getsock(AF_LINK)) == -1)
-		err(EXIT_FAILURE, "%s: getsock", __func__);
-
-	if (getifaddrs(&ifap) == -1)
-		err(EXIT_FAILURE, "%s: getifaddrs", __func__);
-
-	memset(&iflr, 0, sizeof(iflr));
-
-	strlcpy(iflr.iflr_name, ifname, sizeof(iflr.iflr_name));
-
-	for (ifa = ifap; ifa != NULL; ifa = ifa->ifa_next) {
-		if (strcmp(ifname, ifa->ifa_name) != 0)
-			continue;
-		if (ifa->ifa_addr->sa_family != AF_LINK)
-			continue;
-		if (ifa->ifa_data != NULL)
-			continue;
-
-		sdl = satocsdl(ifa->ifa_addr);
-
-		memcpy(&iflr.addr, ifa->ifa_addr, MIN(ifa->ifa_addr->sa_len,
-		    sizeof(iflr.addr)));
-		iflr.flags = IFLR_PREFIX;
-		iflr.prefixlen = sdl->sdl_alen * NBBY;
-
-		if (ioctl(s, SIOCGLIFADDR, &iflr) == -1)
-			err(EXIT_FAILURE, "%s: ioctl", __func__);
-
-                if ((iflr.flags & IFLR_ACTIVE) != 0)
-			continue;
-
-		octets = (const uint8_t *)&sdl->sdl_data[sdl->sdl_nlen];
-
-		delim = "\tlink ";
-		for (i = 0; i < sdl->sdl_alen; i++) {
-			printf("%s%02" PRIx8, delim, octets[i]);
-			delim = ":";
-		}
-		printf("\n");
-	}
+	print_link_addresses(env, false);
 }
 
 static int

Index: src/sbin/ifconfig/ifconfig.8
diff -u src/sbin/ifconfig/ifconfig.8:1.94 src/sbin/ifconfig/ifconfig.8:1.94.8.1
--- src/sbin/ifconfig/ifconfig.8:1.94	Tue Sep 30 09:41:41 2008
+++ src/sbin/ifconfig/ifconfig.8	Wed Apr 21 05:26:34 2010
@@ -1,4 +1,4 @@
-.\"	$NetBSD: ifconfig.8,v 1.94 2008/09/30 09:41:41 wiz Exp $
+.\"	$NetBSD: ifconfig.8,v 1.94.8.1 2010/04/21 05:26:34 matt Exp $
 .\"
 .\" Copyright (c) 1983, 1991, 1993
 .\"	The Regents of the University of California.  All rights reserved.

Index: src/sbin/ifconfig/ifconfig.c
diff -u src/sbin/ifconfig/ifconfig.c:1.213.2.1 src/sbin/ifconfig/ifconfig.c:1.213.2.1.4.1
--- src/sbin/ifconfig/ifconfig.c:1.213.2.1	Sat Apr  4 18:22:54 2009
+++ src/sbin/ifconfig/ifconfig.c	Wed Apr 21 05:26:34 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: ifconfig.c,v 1.213.2.1 2009/04/04 18:22:54 snj Exp $	*/
+/*	$NetBSD: ifconfig.c,v 1.213.2.1.4.1 2010/04/21 05:26:34 matt Exp $	*/
 
 /*-
  * Copyright (c) 1997, 1998, 2000 The NetBSD Foundation, Inc.
@@ -63,7 +63,7 @@
 #ifndef lint
 __COPYRIGHT("@(#) Copyright (c) 1983, 1993\
  The Regents of the University of California.  All rights reserved.");
-__RCSID("$NetBSD: ifconfig.c,v 1.213.2.1 2009/04/04 18:22:54 snj Exp $");
+__RCSID("$NetBSD: ifconfig.c,v 1.213.2.1.4.1 2010/04/21 05:26:34 matt Exp $");
 #endif /* not lint */
 
 #include <sys/param.h>
@@ -126,7 +126,7 @@
 static int setifmtu(prop_dictionary_t, prop_dictionary_t);
 static int setifnetmask(prop_dictionary_t, prop_dictionary_t);
 static int setifprefixlen(prop_dictionary_t, prop_dictionary_t);
-static void status(const struct sockaddr_dl *, prop_dictionary_t,
+static void status(const struct sockaddr *, prop_dictionary_t,
     prop_dictionary_t);
 static void usage(void);
 
@@ -724,7 +724,7 @@
 {
 	struct ifaddrs *ifap, *ifa;
 	struct ifreq ifr;
-	const struct sockaddr_dl *sdl = NULL;
+	const struct sockaddr *sdl = NULL;
 	prop_dictionary_t env, oenv;
 	int idx;
 	char *p;
@@ -754,7 +754,7 @@
 		if (ifname != NULL && strcmp(ifname, ifa->ifa_name) != 0)
 			continue;
 		if (ifa->ifa_addr->sa_family == AF_LINK)
-			sdl = (const struct sockaddr_dl *) ifa->ifa_addr;
+			sdl = ifa->ifa_addr;
 		if (p && strcmp(p, ifa->ifa_name) == 0)
 			continue;
 		if (!prop_dictionary_set_cstring(env, "if", ifa->ifa_name))
@@ -1144,7 +1144,7 @@
  * specified, show it and it only; otherwise, show them all.
  */
 void
-status(const struct sockaddr_dl *sdl, prop_dictionary_t env,
+status(const struct sockaddr *sdl, prop_dictionary_t env,
     prop_dictionary_t oenv)
 {
 	const struct if_data *ifi;
@@ -1152,7 +1152,6 @@
 	statistics_func_t *statistics_f;
 	struct ifdatareq ifdr;
 	struct ifreq ifr;
-	char hbuf[NI_MAXHOST];
 	char fbuf[BUFSIZ];
 	int af, s;
 	const char *ifname;
@@ -1202,11 +1201,7 @@
 	SIMPLEQ_FOREACH(status_f, &status_funcs, f_next)
 		(*status_f->f_func)(env, oenv);
 
-	if (sdl != NULL &&
-	    getnameinfo((const struct sockaddr *)sdl, sdl->sdl_len,
-		hbuf, sizeof(hbuf), NULL, 0, NI_NUMERICHOST) == 0 &&
-	    hbuf[0] != '\0')
-		printf("\taddress: %s\n", hbuf);
+	print_link_addresses(env, true);
 
 	media_status(env, oenv);
 
@@ -1215,7 +1210,7 @@
 
 	estrlcpy(ifdr.ifdr_name, ifname, sizeof(ifdr.ifdr_name));
 
-	if (ioctl(s, zflag ? SIOCZIFDATA:SIOCGIFDATA, &ifdr) == -1)
+	if (ioctl(s, zflag ? SIOCZIFDATA : SIOCGIFDATA, &ifdr) == -1)
 		err(EXIT_FAILURE, zflag ? "SIOCZIFDATA" : "SIOCGIFDATA");
 
 	ifi = &ifdr.ifdr_data;

Index: src/sbin/ifconfig/parse.c
diff -u src/sbin/ifconfig/parse.c:1.12 src/sbin/ifconfig/parse.c:1.12.6.1
--- src/sbin/ifconfig/parse.c:1.12	Fri Aug  1 22:29:14 2008
+++ src/sbin/ifconfig/parse.c	Wed Apr 21 05:26:34 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: parse.c,v 1.12 2008/08/01 22:29:14 dyoung Exp $	*/
+/*	$NetBSD: parse.c,v 1.12.6.1 2010/04/21 05:26:34 matt Exp $	*/
 
 /*-
  * Copyright (c) 2008 David Young.  All rights reserved.
@@ -27,7 +27,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: parse.c,v 1.12 2008/08/01 22:29:14 dyoung Exp $");
+__RCSID("$NetBSD: parse.c,v 1.12.6.1 2010/04/21 05:26:34 matt Exp $");
 #endif /* not lint */
 
 #include <err.h>
@@ -685,8 +685,7 @@
 		o = u->u_obj;
 		break;
 	case KW_T_STR:
-		o = (prop_object_t)prop_data_create_data_nocopy(u->u_str,
-		    strlen(u->u_str));
+		o = (prop_object_t)prop_string_create_cstring_nocopy(u->u_str);
 		if (o == NULL)
 			goto err;
 		break;

Index: src/sbin/ifconfig/util.c
diff -u src/sbin/ifconfig/util.c:1.8 src/sbin/ifconfig/util.c:1.8.6.1
--- src/sbin/ifconfig/util.c:1.8	Wed Jul  2 07:44:15 2008
+++ src/sbin/ifconfig/util.c	Wed Apr 21 05:26:34 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: util.c,v 1.8 2008/07/02 07:44:15 dyoung Exp $	*/
+/*	$NetBSD: util.c,v 1.8.6.1 2010/04/21 05:26:34 matt Exp $	*/
 
 /*-
  * Copyright (c) 2008 David Young.  All rights reserved.
@@ -27,12 +27,13 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: util.c,v 1.8 2008/07/02 07:44:15 dyoung Exp $");
+__RCSID("$NetBSD: util.c,v 1.8.6.1 2010/04/21 05:26:34 matt Exp $");
 #endif /* not lint */
 
 #include <ctype.h>
 #include <err.h>
 #include <errno.h>
+#include <netdb.h>
 #include <stddef.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -40,9 +41,14 @@
 #include <unistd.h>
 #include <util.h>
 
+#include <sys/param.h>
+#include <sys/types.h>
 #include <sys/socket.h>
+#include <ifaddrs.h>
+
 #include <sys/ioctl.h>
 #include <net/if.h>
+#include <net/if_dl.h>
 #include <netinet/in.h>		/* XXX */
 
 #include "env.h"
@@ -230,6 +236,58 @@
 	return direct_ioctl(env, cmd, &ifr);
 }
 
+void
+print_link_addresses(prop_dictionary_t env, bool print_active_only)
+{
+	char hbuf[NI_MAXHOST];
+	const char *ifname;
+	int s;
+	struct ifaddrs *ifa, *ifap;
+	const struct sockaddr_dl *sdl;
+	struct if_laddrreq iflr;
+
+	if ((ifname = getifname(env)) == NULL)
+		err(EXIT_FAILURE, "%s: getifname", __func__);
+
+	if ((s = getsock(AF_LINK)) == -1)
+		err(EXIT_FAILURE, "%s: getsock", __func__);
+
+	if (getifaddrs(&ifap) == -1)
+		err(EXIT_FAILURE, "%s: getifaddrs", __func__);
+
+	memset(&iflr, 0, sizeof(iflr));
+
+	strlcpy(iflr.iflr_name, ifname, sizeof(iflr.iflr_name));
+
+	for (ifa = ifap; ifa != NULL; ifa = ifa->ifa_next) {
+		if (strcmp(ifname, ifa->ifa_name) != 0)
+			continue;
+		if (ifa->ifa_addr->sa_family != AF_LINK)
+			continue;
+
+		sdl = satocsdl(ifa->ifa_addr);
+
+		memcpy(&iflr.addr, ifa->ifa_addr, MIN(ifa->ifa_addr->sa_len,
+		    sizeof(iflr.addr)));
+		iflr.flags = IFLR_PREFIX;
+		iflr.prefixlen = sdl->sdl_alen * NBBY;
+
+		if (ioctl(s, SIOCGLIFADDR, &iflr) == -1)
+			err(EXIT_FAILURE, "%s: ioctl", __func__);
+
+		if (((iflr.flags & IFLR_ACTIVE) != 0) != print_active_only)
+			continue;
+
+		if (getnameinfo(ifa->ifa_addr, ifa->ifa_addr->sa_len,
+			hbuf, sizeof(hbuf), NULL, 0, NI_NUMERICHOST) == 0 &&
+		    hbuf[0] != '\0') {
+			printf("\t%s %s\n",
+			    print_active_only ? "address:" : "link", hbuf);
+		}
+	}
+	freeifaddrs(ifap);
+}
+
 #ifdef INET6
 /* KAME idiosyncrasy */
 void

Index: src/sbin/ifconfig/util.h
diff -u src/sbin/ifconfig/util.h:1.6 src/sbin/ifconfig/util.h:1.6.8.1
--- src/sbin/ifconfig/util.h:1.6	Wed Jul  2 07:44:15 2008
+++ src/sbin/ifconfig/util.h	Wed Apr 21 05:26:34 2010
@@ -13,6 +13,7 @@
 	SIMPLEQ_ENTRY(afswtch)	af_next;
 };
 
+void print_link_addresses(prop_dictionary_t, bool);
 const char *get_string(const char *, const char *, u_int8_t *, int *);
 const struct afswtch *lookup_af_byname(const char *);
 const struct afswtch *lookup_af_bynum(int);

Index: src/sbin/ifconfig/vlan.c
diff -u src/sbin/ifconfig/vlan.c:1.12 src/sbin/ifconfig/vlan.c:1.12.8.1
--- src/sbin/ifconfig/vlan.c:1.12	Tue Jul 15 21:27:58 2008
+++ src/sbin/ifconfig/vlan.c	Wed Apr 21 05:26:34 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: vlan.c,v 1.12 2008/07/15 21:27:58 dyoung Exp $	*/
+/*	$NetBSD: vlan.c,v 1.12.8.1 2010/04/21 05:26:34 matt Exp $	*/
 
 /*
  * Copyright (c) 1983, 1993
@@ -31,7 +31,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: vlan.c,v 1.12 2008/07/15 21:27:58 dyoung Exp $");
+__RCSID("$NetBSD: vlan.c,v 1.12.8.1 2010/04/21 05:26:34 matt Exp $");
 #endif /* not lint */
 
 #include <sys/param.h> 
@@ -140,17 +140,17 @@
 	if (getvlan(env, &vlr, false) == -1)
 		err(EXIT_FAILURE, "%s: getsock", __func__);
 
-	if (!prop_dictionary_get_int64(env, "vlantag", &tag)) {
-		errno = ENOENT;
-		return -1;
-	}
-
 	if (!prop_dictionary_get_cstring_nocopy(env, "vlanif", &parent)) {
 		errno = ENOENT;
 		return -1;
 	}
 	strlcpy(vlr.vlr_parent, parent, sizeof(vlr.vlr_parent));
-	if (strcmp(parent, "") != 0)
+	if (strcmp(parent, "") == 0)
+		;
+	else if (!prop_dictionary_get_int64(env, "vlantag", &tag)) {
+		errno = ENOENT;
+		return -1;
+	} else
 		vlr.vlr_tag = (unsigned short)tag;
 
 	if (indirect_ioctl(env, SIOCSETVLAN, &vlr) == -1)

Index: src/sbin/newfs/newfs.c
diff -u src/sbin/newfs/newfs.c:1.102 src/sbin/newfs/newfs.c:1.102.8.1
--- src/sbin/newfs/newfs.c:1.102	Fri Aug  1 15:32:30 2008
+++ src/sbin/newfs/newfs.c	Wed Apr 21 05:26:34 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: newfs.c,v 1.102 2008/08/01 15:32:30 simonb Exp $	*/
+/*	$NetBSD: newfs.c,v 1.102.8.1 2010/04/21 05:26:34 matt Exp $	*/
 
 /*
  * Copyright (c) 1983, 1989, 1993, 1994
@@ -78,7 +78,7 @@
 #if 0
 static char sccsid[] = "@(#)newfs.c	8.13 (Berkeley) 5/1/95";
 #else
-__RCSID("$NetBSD: newfs.c,v 1.102 2008/08/01 15:32:30 simonb Exp $");
+__RCSID("$NetBSD: newfs.c,v 1.102.8.1 2010/04/21 05:26:34 matt Exp $");
 #endif
 #endif /* not lint */
 
@@ -468,6 +468,10 @@
 		special = device;
 		if (fsi < 0 || fstat(fsi, &sb) == -1)
 			err(1, "%s: open for read", special);
+		if (S_ISBLK(sb.st_mode)) {
+			errx(1, "%s is a block device. use raw device",
+			    special);
+		}
 
 		if (!Nflag) {
 			fso = open(special, O_WRONLY, 0);

Index: src/sbin/newfs_msdos/newfs_msdos.c
diff -u src/sbin/newfs_msdos/newfs_msdos.c:1.27.2.2 src/sbin/newfs_msdos/newfs_msdos.c:1.27.2.2.4.1
--- src/sbin/newfs_msdos/newfs_msdos.c:1.27.2.2	Mon Feb  2 20:52:42 2009
+++ src/sbin/newfs_msdos/newfs_msdos.c	Wed Apr 21 05:26:34 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: newfs_msdos.c,v 1.27.2.2 2009/02/02 20:52:42 snj Exp $	*/
+/*	$NetBSD: newfs_msdos.c,v 1.27.2.2.4.1 2010/04/21 05:26:34 matt Exp $	*/
 
 /*
  * Copyright (c) 1998 Robert Nordier
@@ -33,7 +33,7 @@
 static const char rcsid[] =
   "$FreeBSD: src/sbin/newfs_msdos/newfs_msdos.c,v 1.15 2000/10/10 01:49:37 wollman Exp $";
 #else
-__RCSID("$NetBSD: newfs_msdos.c,v 1.27.2.2 2009/02/02 20:52:42 snj Exp $");
+__RCSID("$NetBSD: newfs_msdos.c,v 1.27.2.2.4.1 2010/04/21 05:26:34 matt Exp $");
 #endif
 #endif /* not lint */
 
@@ -800,7 +800,7 @@
 	if (!bpb->hds)
 	    bpb->hds = ckgeom(fname, geo.dg_ntracks, "drive heads");
 	if (!bpb->bsec)
-	    bpb->bsec = geo.dg_secperunit;
+	    bpb->bsec = dkw.dkw_size;
     }
 }
 

Index: src/sbin/newfs_udf/newfs_udf.8
diff -u src/sbin/newfs_udf/newfs_udf.8:1.4.4.1 src/sbin/newfs_udf/newfs_udf.8:1.4.4.1.4.1
--- src/sbin/newfs_udf/newfs_udf.8:1.4.4.1	Wed Feb 18 00:37:00 2009
+++ src/sbin/newfs_udf/newfs_udf.8	Wed Apr 21 05:26:34 2010
@@ -1,4 +1,4 @@
-.\" $NetBSD: newfs_udf.8,v 1.4.4.1 2009/02/18 00:37:00 snj Exp $
+.\" $NetBSD: newfs_udf.8,v 1.4.4.1.4.1 2010/04/21 05:26:34 matt Exp $
 .\"
 .\" Copyright (c) 2008 Reinoud Zandijk
 .\" All rights reserved.
@@ -70,7 +70,7 @@
 .Ar setlabel .
 For strict conformance and interchange, don't set this manually.
 .It Fl M
-Disable metadata partion creation when selected UDF version or media dictates
+Disable metadata partition creation when selected UDF version or media dictates
 this. For strict conformance and interchange, don't disable this unless its
 causing problems.
 .It Fl s Ar size

Index: src/sbin/newfs_udf/udf_create.c
diff -u src/sbin/newfs_udf/udf_create.c:1.12.4.2 src/sbin/newfs_udf/udf_create.c:1.12.4.2.4.1
--- src/sbin/newfs_udf/udf_create.c:1.12.4.2	Wed Feb 18 00:37:00 2009
+++ src/sbin/newfs_udf/udf_create.c	Wed Apr 21 05:26:34 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: udf_create.c,v 1.12.4.2 2009/02/18 00:37:00 snj Exp $ */
+/* $NetBSD: udf_create.c,v 1.12.4.2.4.1 2010/04/21 05:26:34 matt Exp $ */
 
 /*
  * Copyright (c) 2006, 2008 Reinoud Zandijk
@@ -28,7 +28,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: udf_create.c,v 1.12.4.2 2009/02/18 00:37:00 snj Exp $");
+__RCSID("$NetBSD: udf_create.c,v 1.12.4.2.4.1 2010/04/21 05:26:34 matt Exp $");
 #endif /* not lint */
 
 #include <stdio.h>
@@ -309,7 +309,7 @@
 		printf("\tsparable size\t\t%d\n", layout.sparable_area_size);
 		printf("\tsparable\t\t%d\n", layout.sparable_area);
 	}
-	printf("\tpartion start lba\t%d\n", layout.part_start_lba);
+	printf("\tpartition start lba\t%d\n", layout.part_start_lba);
 	printf("\tpartition size\t\t%d KiB, %d MiB\n",
 		(layout.part_size_lba * sector_size) / 1024,
 		(layout.part_size_lba * sector_size) / (1024*1024));
@@ -782,7 +782,7 @@
 	context.part_size[log_part] = layout.part_size_lba;
 	context.part_free[log_part] = layout.part_size_lba;
 
-	/* increment number of partions and length */
+	/* increment number of partitions and length */
 	logvol->n_pm = udf_rw32(log_part + 1);
 	logvol->mt_l = udf_rw32(udf_rw32(logvol->mt_l) + pmap1_size);
 
@@ -820,7 +820,7 @@
 	context.part_size[log_part] = 0xffffffff;
 	context.part_free[log_part] = 0xffffffff;
 
-	/* increment number of partions and length */
+	/* increment number of partitions and length */
 	logvol->n_pm = udf_rw32(log_part + 1);
 	logvol->mt_l = udf_rw32(udf_rw32(logvol->mt_l) + pmapv_size);
 
@@ -875,7 +875,7 @@
 	context.part_size[log_part] = layout.part_size_lba;
 	context.part_free[log_part] = layout.part_size_lba;
 
-	/* increment number of partions and length */
+	/* increment number of partitions and length */
 	logvol->n_pm = udf_rw32(log_part + 1);
 	logvol->mt_l = udf_rw32(udf_rw32(logvol->mt_l) + pmaps_size);
 
@@ -962,7 +962,7 @@
 	context.part_size[log_part] = layout.meta_part_size_lba;
 	context.part_free[log_part] = layout.meta_part_size_lba;
 
-	/* increment number of partions and length */
+	/* increment number of partitions and length */
 	logvol->n_pm = udf_rw32(log_part + 1);
 	logvol->mt_l = udf_rw32(udf_rw32(logvol->mt_l) + pmapv_size);
 
@@ -1055,7 +1055,7 @@
 	assert(lvid);
 	assert(logvol);
 
-	lvid->integrity_type = udf_rw16(type);
+	lvid->integrity_type = udf_rw32(type);
 
 	num_partmappings = udf_rw32(logvol->n_pm);
 
@@ -1298,7 +1298,7 @@
 	fid->file_char = UDF_FILE_CHAR_DIR | UDF_FILE_CHAR_PAR;
 	fid->icb = *parent;
 	fid->icb.longad_uniqueid = udf_rw32((uint32_t) unique_id);
-	fid->tag.desc_crc_len = fidsize - UDF_DESC_TAG_LENGTH;
+	fid->tag.desc_crc_len = udf_rw16(fidsize - UDF_DESC_TAG_LENGTH);
 
 	/* we have to do the fid here explicitly for simplicity */
 	udf_validate_tag_and_crc_sums((union dscrptr *) fid);
@@ -1792,7 +1792,7 @@
 
 		free(extattr);
 
-		/* writeout VAT locations (partion offsets) */
+		/* writeout VAT locations (partition offsets) */
 		vat_pos = (uint32_t *) (fe->data + udf_rw32(fe->l_ea));
 		vat_pos[layout.rootdir] = udf_rw32(layout.rootdir); 
 		vat_pos[layout.fsd    ] = udf_rw32(layout.fsd);

Index: src/sbin/ping/ping.c
diff -u src/sbin/ping/ping.c:1.87 src/sbin/ping/ping.c:1.87.16.1
--- src/sbin/ping/ping.c:1.87	Tue Jan  8 20:03:09 2008
+++ src/sbin/ping/ping.c	Wed Apr 21 05:26:34 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: ping.c,v 1.87 2008/01/08 20:03:09 seanb Exp $	*/
+/*	$NetBSD: ping.c,v 1.87.16.1 2010/04/21 05:26:34 matt Exp $	*/
 
 /*
  * Copyright (c) 1989, 1993
@@ -58,7 +58,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: ping.c,v 1.87 2008/01/08 20:03:09 seanb Exp $");
+__RCSID("$NetBSD: ping.c,v 1.87.16.1 2010/04/21 05:26:34 matt Exp $");
 #endif
 
 #include <stdio.h>
@@ -155,6 +155,7 @@
 u_char	*packet;
 int	packlen;
 int	pingflags = 0, options;
+int	pongflags = 0;
 char	*fill_pat;
 
 int s;					/* Socket file descriptor */
@@ -1017,8 +1018,31 @@
 
 		if (tot_len != opack_ip->ip_len) {
 			PR_PACK_SUB();
-			(void)printf("\nwrong total length %d instead of %d",
-				     tot_len, opack_ip->ip_len);
+			switch (opack_ip->ip_len - tot_len) {
+			case MAX_IPOPTLEN:
+				if ((pongflags & F_RECORD_ROUTE) != 0)
+					break;
+				if ((pingflags & F_RECORD_ROUTE) == 0)
+					goto out;
+				pongflags |= F_RECORD_ROUTE;
+				(void)printf("\nremote host does not "
+				    "support record route");
+				break;
+			case 8:
+				if ((pongflags & F_SOURCE_ROUTE) != 0)
+					break;
+				if ((pingflags & F_SOURCE_ROUTE) == 0)
+					goto out;
+				pongflags |= F_SOURCE_ROUTE;
+				(void)printf("\nremote host does not "
+				    "support source route");
+				break;
+			default:
+			out:
+				(void)printf("\nwrong total length %d "
+				    "instead of %d", tot_len, opack_ip->ip_len);
+				break;
+			}
 		}
 
 		if (!dupflag) {

Index: src/sbin/raidctl/raidctl.8
diff -u src/sbin/raidctl/raidctl.8:1.56 src/sbin/raidctl/raidctl.8:1.56.8.1
--- src/sbin/raidctl/raidctl.8:1.56	Thu Aug 28 21:24:30 2008
+++ src/sbin/raidctl/raidctl.8	Wed Apr 21 05:26:34 2010
@@ -1,4 +1,4 @@
-.\"     $NetBSD: raidctl.8,v 1.56 2008/08/28 21:24:30 wiz Exp $
+.\"     $NetBSD: raidctl.8,v 1.56.8.1 2010/04/21 05:26:34 matt Exp $
 .\"
 .\" Copyright (c) 1998, 2002 The NetBSD Foundation, Inc.
 .\" All rights reserved.
@@ -53,7 +53,7 @@
 .\" any improvements or extensions that they make and grant Carnegie the
 .\" rights to redistribute these changes.
 .\"
-.Dd August 26, 2008
+.Dd November 17, 2009
 .Dt RAIDCTL 8
 .Os
 .Sh NAME
@@ -96,6 +96,16 @@
 .Fl I Ar serial_number Ar dev
 .Nm
 .Op Fl v
+.Fl m Ar dev
+.Nm
+.Op Fl v
+.Fl M
+.Oo yes | no | set
+.Ar params
+.Oc
+.Ar dev
+.Nm
+.Op Fl v
 .Fl p Ar dev
 .Nm
 .Op Fl v
@@ -222,6 +232,44 @@
 This step
 .Em MUST
 be performed when a new RAID set is created.
+.It Fl m Ar dev
+Display status information about the parity map on the RAID set, if any.
+If used with
+.Fl v
+then the current contents of the parity map will be output (in
+hexadecimal format) as well.
+.It Fl M Ic yes Ar dev
+.\"XXX should there be a section with more info on the parity map feature?
+Enable the use of a parity map on the RAID set; this is the default,
+and greatly reduces the time taken to check parity after unclean
+shutdowns at the cost of some very slight overhead during normal
+operation.
+Changes to this setting will take effect the next time the set is
+configured.
+Note that RAID-0 sets, having no parity, will not use a parity map in
+any case.
+.It Fl M Ic no Ar dev
+Disable the use of a parity map on the RAID set; doing this is not
+recommended.
+This will take effect the next time the set is configured.
+.It Fl M Ic set Ar cooldown Ar tickms Ar regions Ar dev
+Alter the parameters of the parity map; parameters to leave unchanged
+can be given as 0, and trailing zeroes may be omitted.
+.\"XXX should this explanation be deferred to another section as well?
+The RAID set is divided into
+.Ar regions
+regions; each region is marked dirty for at most
+.Ar cooldown
+intervals of
+.Ar tickms
+milliseconds each after a write to it, and at least
+.Ar cooldown
+\- 1 such intervals.
+Changes to
+.Ar regions
+take effect the next time is configured, while changes to the other
+parameters are applied immediately.
+The default parameters are expected to be reasonable for most workloads.
 .It Fl p Ar dev
 Check the status of the parity on the RAID set.
 Displays a status message,
@@ -1396,7 +1444,7 @@
 Since there are 4 data sectors per stripe, the maximum
 data per stripe is 64 blocks (32K) or 128 blocks (64K).
 Again, empirical measurement will provide the best indicators of which
-values will yeild better performance.
+values will yield better performance.
 .Pp
 The parameters used for the file system are also critical to good performance.
 For

Index: src/sbin/raidctl/raidctl.c
diff -u src/sbin/raidctl/raidctl.c:1.39.4.1 src/sbin/raidctl/raidctl.c:1.39.4.1.4.1
--- src/sbin/raidctl/raidctl.c:1.39.4.1	Sun Feb  1 23:41:37 2009
+++ src/sbin/raidctl/raidctl.c	Wed Apr 21 05:26:35 2010
@@ -1,4 +1,4 @@
-/*      $NetBSD: raidctl.c,v 1.39.4.1 2009/02/01 23:41:37 snj Exp $   */
+/*      $NetBSD: raidctl.c,v 1.39.4.1.4.1 2010/04/21 05:26:35 matt Exp $   */
 
 /*-
  * Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc.
@@ -39,7 +39,7 @@
 #include <sys/cdefs.h>
 
 #ifndef lint
-__RCSID("$NetBSD: raidctl.c,v 1.39.4.1 2009/02/01 23:41:37 snj Exp $");
+__RCSID("$NetBSD: raidctl.c,v 1.39.4.1.4.1 2010/04/21 05:26:35 matt Exp $");
 #endif
 
 
@@ -82,13 +82,15 @@
 static  void do_meter(int, u_long);
 static  void get_bar(char *, double, int);
 static  void get_time_string(char *, int);
+static  void rf_output_pmstat(int, int);
+static  void rf_pm_configure(int, int, char *, int[]);
 
 int verbose;
 
 int
 main(int argc,char *argv[])
 {
-	int ch;
+	int ch, i;
 	int num_options;
 	unsigned long action;
 	char config_filename[PATH_MAX];
@@ -96,6 +98,8 @@
 	char name[PATH_MAX];
 	char component[PATH_MAX];
 	char autoconf[10];
+	char *parityconf = NULL;
+	int parityparams[3];
 	int do_output;
 	int do_recon;
 	int do_rewrite;
@@ -117,7 +121,7 @@
 	force = 0;
 	openmode = O_RDWR;	/* default to read/write */
 
-	while ((ch = getopt(argc, argv, "a:A:Bc:C:f:F:g:GiI:l:r:R:sSpPuv")) 
+	while ((ch = getopt(argc, argv, "a:A:Bc:C:f:F:g:GiI:l:mM:r:R:sSpPuv")) 
 	       != -1)
 		switch(ch) {
 		case 'a':
@@ -181,6 +185,23 @@
 			serial_number = atoi(optarg);
 			num_options++;
 			break;
+		case 'm':
+			action = RAIDFRAME_PARITYMAP_STATUS;
+			openmode = O_RDONLY;
+			num_options++;
+			break;
+		case 'M':
+			action = RAIDFRAME_PARITYMAP_SET_DISABLE;
+			parityconf = strdup(optarg);
+			num_options++;
+			/* XXXjld: should rf_pm_configure do the atoi()s? */
+			i = 0;
+			while (i < 3 && optind < argc &&
+			    isdigit((int)argv[optind][0]))
+				parityparams[i++] = atoi(argv[optind++]);
+			while (i < 3)
+				parityparams[i++] = 0;
+			break;
 		case 'l': 
 			action = RAIDFRAME_SET_COMPONENT_LABEL;
 			strlcpy(component, optarg, sizeof(component));
@@ -308,6 +329,12 @@
 		else
 			rf_get_device_status(fd);
 		break;
+	case RAIDFRAME_PARITYMAP_STATUS:
+		rf_output_pmstat(fd, raidID);
+		break;
+	case RAIDFRAME_PARITYMAP_SET_DISABLE:
+		rf_pm_configure(fd, raidID, parityconf, parityparams);
+		break;
 	case RAIDFRAME_REBUILD_IN_PLACE:
 		rebuild_in_place(fd, component);
 		break;
@@ -455,6 +482,105 @@
 }
 
 static void
+rf_output_pmstat(int fd, int raidID)
+{
+	char srs[7];
+	int i, j, dr;
+	int dis;
+	struct rf_pmstat st;
+
+	do_ioctl(fd, RAIDFRAME_PARITYMAP_STATUS, &st,
+	    "RAIDFRAME_PARITYMAP_STATUS");
+	if (st.enabled) {
+		if (0 > humanize_number(srs, 7, st.region_size * DEV_BSIZE, 
+			"B", HN_AUTOSCALE, HN_NOSPACE))
+			strlcpy(srs, "???", 7);
+
+		printf("raid%d: parity map enabled with %u regions of %s\n",
+		    raidID, st.params.regions, srs);
+		printf("raid%d: regions marked clean after %d intervals of"
+		    " %d.%03ds\n", raidID, st.params.cooldown,
+		    st.params.tickms / 1000, st.params.tickms % 1000);
+		printf("raid%d: write/sync/clean counters "
+		    "%"PRIu64"/%"PRIu64"/%"PRIu64"\n", raidID,
+		    st.ctrs.nwrite, st.ctrs.ncachesync, st.ctrs.nclearing);
+
+		dr = 0;
+		for (i = 0; i < RF_PARITYMAP_NREG; i++)
+			if (isset(st.dirty, i))
+				dr++;
+		printf("raid%d: %d dirty region%s\n", raidID, dr,
+		    dr == 1 ? "" : "s");
+
+		if (verbose > 0) {
+			for (i = 0; i < RF_PARITYMAP_NBYTE; i += 32) {
+				printf("    ");
+				for (j = i; j < RF_PARITYMAP_NBYTE
+					 && j < i + 32; j++)
+					printf("%x%x", st.dirty[j] & 15, 
+					    (st.dirty[j] >> 4) & 15);
+				printf("\n");
+			}
+		}
+	} else {
+		printf("raid%d: parity map disabled\n", raidID);
+	}
+
+	do_ioctl(fd, RAIDFRAME_PARITYMAP_GET_DISABLE, &dis,
+	    "RAIDFRAME_PARITYMAP_GET_DISABLE");
+	printf("raid%d: parity map will %s %sabled on next configure\n", 
+	    raidID, dis == st.enabled ? "be" : "remain", dis ? "dis" : "en");
+}
+
+static void
+rf_pm_configure(int fd, int raidID, char *parityconf, int parityparams[])
+{
+	int dis;
+	struct rf_pmparams params;
+
+	if (strcasecmp(parityconf, "yes") == 0)
+		dis = 0;
+	else if (strcasecmp(parityconf, "no") == 0)
+		dis = 1;
+	else if (strcasecmp(parityconf, "set") == 0) {
+		params.cooldown = parityparams[0];
+		params.tickms = parityparams[1];
+		params.regions = parityparams[2];
+		
+		do_ioctl(fd, RAIDFRAME_PARITYMAP_SET_PARAMS, &params,
+		    "RAIDFRAME_PARITYMAP_SET_PARAMS");
+
+		if (params.cooldown != 0 || params.tickms != 0) {
+			printf("raid%d: parity cleaned after", raidID);
+			if (params.cooldown != 0)
+				printf(" %d", params.cooldown);
+			printf(" intervals");
+			if (params.tickms != 0) {
+				printf(" of %d.%03ds", params.tickms / 1000,
+				    params.tickms % 1000);
+			}
+			printf("\n");
+		}
+		if (params.regions != 0)
+			printf("raid%d: will use %d regions on next"
+			    " configuration\n", raidID, params.regions);
+
+		return;
+		/* XXX the control flow here could be prettier. */
+	} else {
+		fprintf(stderr, "%s: \"%s\" is not a valid parity map command"
+		    "\n", getprogname(), parityconf);
+		exit(1);
+	}
+
+	do_ioctl(fd, RAIDFRAME_PARITYMAP_SET_DISABLE, &dis,
+	    "RAIDFRAME_PARITYMAP_SET_DISABLE");
+	printf("raid%d: parity map will be %sabled on next configure\n", 
+	    raidID, dis ? "dis" : "en");
+}
+
+
+static void
 rf_output_configuration(int fd, const char *name)
 {
 	RF_DeviceConfig_t device_config;
@@ -1022,7 +1148,7 @@
 	const char *progname = getprogname();
 
 	fprintf(stderr, "usage: %s [-v] -a component dev\n", progname);
-	fprintf(stderr, "       %s [-v] -A yes | no | root dev\n", progname);
+	fprintf(stderr, "       %s [-v] -A [yes | no | root] dev\n", progname);
 	fprintf(stderr, "       %s [-v] -B dev\n", progname);
 	fprintf(stderr, "       %s [-v] -c config_file dev\n", progname);
 	fprintf(stderr, "       %s [-v] -C config_file dev\n", progname);
@@ -1032,6 +1158,9 @@
 	fprintf(stderr, "       %s [-v] -G dev\n", progname);
 	fprintf(stderr, "       %s [-v] -i dev\n", progname);
 	fprintf(stderr, "       %s [-v] -I serial_number dev\n", progname);
+	fprintf(stderr, "       %s [-v] -m dev\n", progname);
+	fprintf(stderr, "       %s [-v] -M [yes | no | set params] dev\n",
+	    progname);
 	fprintf(stderr, "       %s [-v] -p dev\n", progname);
 	fprintf(stderr, "       %s [-v] -P dev\n", progname);
 	fprintf(stderr, "       %s [-v] -r component dev\n", progname); 

Index: src/sbin/savecore/savecore.c
diff -u src/sbin/savecore/savecore.c:1.76.2.1 src/sbin/savecore/savecore.c:1.76.2.1.4.1
--- src/sbin/savecore/savecore.c:1.76.2.1	Tue Mar 24 20:46:43 2009
+++ src/sbin/savecore/savecore.c	Wed Apr 21 05:26:35 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: savecore.c,v 1.76.2.1 2009/03/24 20:46:43 snj Exp $	*/
+/*	$NetBSD: savecore.c,v 1.76.2.1.4.1 2010/04/21 05:26:35 matt Exp $	*/
 
 /*-
  * Copyright (c) 1986, 1992, 1993
@@ -39,7 +39,7 @@
 #if 0
 static char sccsid[] = "@(#)savecore.c	8.5 (Berkeley) 4/28/95";
 #else
-__RCSID("$NetBSD: savecore.c,v 1.76.2.1 2009/03/24 20:46:43 snj Exp $");
+__RCSID("$NetBSD: savecore.c,v 1.76.2.1.4.1 2010/04/21 05:26:35 matt Exp $");
 #endif
 #endif /* not lint */
 
@@ -910,11 +910,9 @@
 	struct statvfs fsbuf;
 	char mbuf[100], path[MAXPATHLEN];
 
-	if (stat(kernel, &st) < 0) {
-		syslog(LOG_ERR, "%s: %m", kernel);
-		exit(1);
-	}
-	kernelsize = st.st_blocks * S_BLKSIZE;
+	/* XXX assume a reasonable default, unless we find a kernel. */
+	kernelsize = 20 * 1024 * 1024;
+	if (!stat(kernel, &st)) kernelsize = st.st_blocks * S_BLKSIZE;
 	if (statvfs(dirname, &fsbuf) < 0) {
 		syslog(LOG_ERR, "%s: %m", dirname);
 		exit(1);

Index: src/sbin/tunefs/tunefs.c
diff -u src/sbin/tunefs/tunefs.c:1.37 src/sbin/tunefs/tunefs.c:1.37.8.1
--- src/sbin/tunefs/tunefs.c:1.37	Thu Jul 31 15:55:41 2008
+++ src/sbin/tunefs/tunefs.c	Wed Apr 21 05:26:35 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: tunefs.c,v 1.37 2008/07/31 15:55:41 simonb Exp $	*/
+/*	$NetBSD: tunefs.c,v 1.37.8.1 2010/04/21 05:26:35 matt Exp $	*/
 
 /*
  * Copyright (c) 1983, 1993
@@ -39,7 +39,7 @@
 #if 0
 static char sccsid[] = "@(#)tunefs.c	8.3 (Berkeley) 5/3/95";
 #else
-__RCSID("$NetBSD: tunefs.c,v 1.37 2008/07/31 15:55:41 simonb Exp $");
+__RCSID("$NetBSD: tunefs.c,v 1.37.8.1 2010/04/21 05:26:35 matt Exp $");
 #endif
 #endif /* not lint */
 
@@ -345,7 +345,7 @@
 		printf("\n");
 		printf("\tjournal log flags:");
 		if (sblock.fs_journal_flags & UFS_WAPBL_FLAGS_CREATE_LOG)
-			printf(" clear-log");
+			printf(" create-log");
 		if (sblock.fs_journal_flags & UFS_WAPBL_FLAGS_CLEAR_LOG)
 			printf(" clear-log");
 		printf("\n");
@@ -389,15 +389,6 @@
 		break;
 	}
 
-	if (!in_fs_log)
-		errx(1, "Can't change size of non-in-filesystem log");
-
-	if (old_size == logfilesize && logfilesize > 0) {
-		/* no action */
-		warnx("log file size remains unchanged at %lld", logfilesize);
-		return;
-	}
-
 	if (logfilesize == 0) {
 		/*
 		 * Don't clear out the locators - the kernel might need
@@ -410,6 +401,15 @@
 		return;
 	}
 
+	if (!in_fs_log && logfilesize > 0 && old_size > 0)
+		errx(1, "Can't change size of non-in-filesystem log");
+
+	if (old_size == logfilesize && logfilesize > 0) {
+		/* no action */
+		warnx("log file size remains unchanged at %lld", logfilesize);
+		return;
+	}
+
 	if (old_size == 0) {
 		/* create new log of desired size next mount */
 		sblock.fs_journal_location = UFS_WAPBL_JOURNALLOC_IN_FILESYSTEM;

Index: src/sbin/wsconsctl/wsconsctl.8
diff -u src/sbin/wsconsctl/wsconsctl.8:1.25.6.1 src/sbin/wsconsctl/wsconsctl.8:1.25.6.1.2.1
--- src/sbin/wsconsctl/wsconsctl.8:1.25.6.1	Sun Jul 26 18:52:48 2009
+++ src/sbin/wsconsctl/wsconsctl.8	Wed Apr 21 05:26:35 2010
@@ -1,4 +1,4 @@
-.\" $NetBSD: wsconsctl.8,v 1.25.6.1 2009/07/26 18:52:48 snj Exp $
+.\" $NetBSD: wsconsctl.8,v 1.25.6.1.2.1 2010/04/21 05:26:35 matt Exp $
 .\"
 .\" Copyright (c) 1998, 2004 The NetBSD Foundation, Inc.
 .\" All rights reserved.

Reply via email to