Module Name:    src
Committed By:   dholland
Date:           Tue Sep  1 06:12:04 UTC 2015

Modified Files:
        src/libexec/lfs_cleanerd: lfs_cleanerd.c
        src/sbin/dump_lfs: lfs_inode.c
        src/sbin/fsck_lfs: lfs.c pass1.c pass6.c setup.c
        src/sbin/newfs_lfs: make_lfs.c
        src/sys/lib/libsa: ufs.c
        src/sys/ufs/lfs: lfs.h lfs_accessors.h lfs_debug.c
        src/usr.sbin/dumplfs: dumplfs.c

Log Message:
The ifile's inode number is constant. (it is always 1)

Therefore, storing the value in the superblock and reading it out
again is silly and offers the opportunity for it to become corrupted.
So, don't do that (most of the code already didn't) and use the
existing constant instead. Initialize new 32-bit superblocks with
the value for the sake of old userland programs, but don't keep the
value in the 64-bit superblock at all.

(approved by Margo Seltzer)


To generate a diff of this commit:
cvs rdiff -u -r1.51 -r1.52 src/libexec/lfs_cleanerd/lfs_cleanerd.c
cvs rdiff -u -r1.25 -r1.26 src/sbin/dump_lfs/lfs_inode.c
cvs rdiff -u -r1.59 -r1.60 src/sbin/fsck_lfs/lfs.c
cvs rdiff -u -r1.42 -r1.43 src/sbin/fsck_lfs/pass1.c
cvs rdiff -u -r1.44 -r1.45 src/sbin/fsck_lfs/pass6.c
cvs rdiff -u -r1.56 -r1.57 src/sbin/fsck_lfs/setup.c
cvs rdiff -u -r1.45 -r1.46 src/sbin/newfs_lfs/make_lfs.c
cvs rdiff -u -r1.72 -r1.73 src/sys/lib/libsa/ufs.c
cvs rdiff -u -r1.182 -r1.183 src/sys/ufs/lfs/lfs.h
cvs rdiff -u -r1.18 -r1.19 src/sys/ufs/lfs/lfs_accessors.h
cvs rdiff -u -r1.53 -r1.54 src/sys/ufs/lfs/lfs_debug.c
cvs rdiff -u -r1.56 -r1.57 src/usr.sbin/dumplfs/dumplfs.c

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

Modified files:

Index: src/libexec/lfs_cleanerd/lfs_cleanerd.c
diff -u src/libexec/lfs_cleanerd/lfs_cleanerd.c:1.51 src/libexec/lfs_cleanerd/lfs_cleanerd.c:1.52
--- src/libexec/lfs_cleanerd/lfs_cleanerd.c:1.51	Tue Sep  1 06:10:16 2015
+++ src/libexec/lfs_cleanerd/lfs_cleanerd.c	Tue Sep  1 06:12:04 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: lfs_cleanerd.c,v 1.51 2015/09/01 06:10:16 dholland Exp $	 */
+/* $NetBSD: lfs_cleanerd.c,v 1.52 2015/09/01 06:12:04 dholland Exp $	 */
 
 /*-
  * Copyright (c) 2005 The NetBSD Foundation, Inc.
@@ -1017,10 +1017,10 @@ check_hidden_cost(struct clfs *fs, BLOCK
 			/*
 			 * Look for IFILE blocks, unless this is the Ifile.
 			 */
-			if (bip[i].bi_inode != lfs_sb_getifile(fs)) {
+			if (bip[i].bi_inode != LFS_IFILE_INUM) {
 				lbn = lfs_sb_getcleansz(fs) + bip[i].bi_inode /
 							lfs_sb_getifpb(fs);
-				*ifc += check_or_add(lfs_sb_getifile(fs), lbn,
+				*ifc += check_or_add(LFS_IFILE_INUM, lbn,
 						     bip, bic, &ebip, &ebic);
 			}
 		}

Index: src/sbin/dump_lfs/lfs_inode.c
diff -u src/sbin/dump_lfs/lfs_inode.c:1.25 src/sbin/dump_lfs/lfs_inode.c:1.26
--- src/sbin/dump_lfs/lfs_inode.c:1.25	Wed Aug 12 18:28:00 2015
+++ src/sbin/dump_lfs/lfs_inode.c	Tue Sep  1 06:12:04 2015
@@ -1,4 +1,4 @@
-/*      $NetBSD: lfs_inode.c,v 1.25 2015/08/12 18:28:00 dholland Exp $ */
+/*      $NetBSD: lfs_inode.c,v 1.26 2015/09/01 06:12:04 dholland Exp $ */
 
 /*-
  * Copyright (c) 1980, 1991, 1993, 1994
@@ -39,7 +39,7 @@ __COPYRIGHT("@(#) Copyright (c) 1980, 19
 #if 0
 static char sccsid[] = "@(#)main.c      8.6 (Berkeley) 5/1/95";
 #else
-__RCSID("$NetBSD: lfs_inode.c,v 1.25 2015/08/12 18:28:00 dholland Exp $");
+__RCSID("$NetBSD: lfs_inode.c,v 1.26 2015/09/01 06:12:04 dholland Exp $");
 #endif
 #endif /* not lint */
 
@@ -170,7 +170,7 @@ fs_parametrize(void)
 ino_t
 fs_maxino(void)
 {
-	return ((getino(lfs_sb_getifile(sblock))->dp1.di_size
+	return ((getino(LFS_IFILE_INUM)->dp1.di_size
 		   - (lfs_sb_getcleansz(sblock) + lfs_sb_getsegtabsz(sblock))
 		   * lfs_sb_getbsize(sblock))
 		  / lfs_sb_getbsize(sblock)) * lfs_sb_getifpb(sblock) - 1;
@@ -288,7 +288,7 @@ lfs_ientry(ino_t ino)
 	unsigned index;
     
 	lbn = ino/lfs_sb_getifpb(sblock) + lfs_sb_getcleansz(sblock) + lfs_sb_getsegtabsz(sblock);
-	dp = getino(lfs_sb_getifile(sblock));
+	dp = getino(LFS_IFILE_INUM);
 	/* XXX this is foolish */
 	if (sblock->lfs_is64) {
 		ldp = (union lfs_dinode *)&dp->dlp64;
@@ -340,7 +340,7 @@ getino(ino_t inum)
 	union lfs_dinode *dp;
 	ino_t inum2;
 
-	if(inum == lfs_sb_getifile(sblock)) {
+	if (inum == LFS_IFILE_INUM) {
 		/* Load the ifile inode if not already */
 		inum2 = sblock->lfs_is64 ?
 			ifile_dinode.dlp64.di_inumber :

Index: src/sbin/fsck_lfs/lfs.c
diff -u src/sbin/fsck_lfs/lfs.c:1.59 src/sbin/fsck_lfs/lfs.c:1.60
--- src/sbin/fsck_lfs/lfs.c:1.59	Tue Sep  1 06:10:16 2015
+++ src/sbin/fsck_lfs/lfs.c	Tue Sep  1 06:12:04 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: lfs.c,v 1.59 2015/09/01 06:10:16 dholland Exp $ */
+/* $NetBSD: lfs.c,v 1.60 2015/09/01 06:12:04 dholland Exp $ */
 /*-
  * Copyright (c) 2003 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -559,8 +559,7 @@ lfs_init(int devfd, daddr_t sblkno, dadd
 	else
 		lfs_sb_setidaddr(fs, idaddr);
 	/* NB: If dummy_read!=0, idaddr==0 here so we get a fake inode. */
-	fs->lfs_ivnode = lfs_raw_vget(fs,
-		(dummy_read ? LFS_IFILE_INUM : lfs_sb_getifile(fs)),
+	fs->lfs_ivnode = lfs_raw_vget(fs, LFS_IFILE_INUM,
 		devvp->v_fd, idaddr);
 	if (fs->lfs_ivnode == NULL)
 		return NULL;

Index: src/sbin/fsck_lfs/pass1.c
diff -u src/sbin/fsck_lfs/pass1.c:1.42 src/sbin/fsck_lfs/pass1.c:1.43
--- src/sbin/fsck_lfs/pass1.c:1.42	Wed Aug 12 18:28:00 2015
+++ src/sbin/fsck_lfs/pass1.c	Tue Sep  1 06:12:04 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: pass1.c,v 1.42 2015/08/12 18:28:00 dholland Exp $	 */
+/* $NetBSD: pass1.c,v 1.43 2015/09/01 06:12:04 dholland Exp $	 */
 
 /*
  * Copyright (c) 1980, 1986, 1993
@@ -112,7 +112,7 @@ pass1(void)
 	for (i = 0; i < maxino; i++) {
 		dins[i] = emalloc(sizeof(**dins));
 		dins[i]->ino = i;
-		if (i == lfs_sb_getifile(fs))
+		if (i == LFS_IFILE_INUM)
 			dins[i]->daddr = lfs_sb_getidaddr(fs);
 		else {
 			LFS_IENTRY(ifp, fs, i, bp);

Index: src/sbin/fsck_lfs/pass6.c
diff -u src/sbin/fsck_lfs/pass6.c:1.44 src/sbin/fsck_lfs/pass6.c:1.45
--- src/sbin/fsck_lfs/pass6.c:1.44	Tue Sep  1 06:08:37 2015
+++ src/sbin/fsck_lfs/pass6.c	Tue Sep  1 06:12:04 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: pass6.c,v 1.44 2015/09/01 06:08:37 dholland Exp $	 */
+/* $NetBSD: pass6.c,v 1.45 2015/09/01 06:12:04 dholland Exp $	 */
 
 /*-
  * Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -667,7 +667,7 @@ pass6(void)
 			for (k = 0; k < LFS_INOPB(fs); k++) {
 				dp = DINO_IN_BLOCK(fs, ibbuf, k);
 				if (lfs_dino_getinumber(fs, dp) == 0 ||
-				    lfs_dino_getinumber(fs, dp) == lfs_sb_getifile(fs))
+				    lfs_dino_getinumber(fs, dp) == LFS_IFILE_INUM)
 					continue;
 				/* Basic sanity checks */
 				if (lfs_dino_getnlink(fs, dp) < 0 

Index: src/sbin/fsck_lfs/setup.c
diff -u src/sbin/fsck_lfs/setup.c:1.56 src/sbin/fsck_lfs/setup.c:1.57
--- src/sbin/fsck_lfs/setup.c:1.56	Tue Sep  1 06:08:37 2015
+++ src/sbin/fsck_lfs/setup.c	Tue Sep  1 06:12:04 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: setup.c,v 1.56 2015/09/01 06:08:37 dholland Exp $ */
+/* $NetBSD: setup.c,v 1.57 2015/09/01 06:12:04 dholland Exp $ */
 
 /*-
  * Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -438,7 +438,7 @@ setup(const char *dev)
 	}
 
 	/* Initialize Ifile entry */
-	din_table[lfs_sb_getifile(fs)] = lfs_sb_getidaddr(fs);
+	din_table[LFS_IFILE_INUM] = lfs_sb_getidaddr(fs);
 	seg_table[lfs_dtosn(fs, lfs_sb_getidaddr(fs))].su_nbytes += DINOSIZE(fs);
 
 #ifndef VERBOSE_BLOCKMAP

Index: src/sbin/newfs_lfs/make_lfs.c
diff -u src/sbin/newfs_lfs/make_lfs.c:1.45 src/sbin/newfs_lfs/make_lfs.c:1.46
--- src/sbin/newfs_lfs/make_lfs.c:1.45	Tue Sep  1 06:10:16 2015
+++ src/sbin/newfs_lfs/make_lfs.c	Tue Sep  1 06:12:04 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: make_lfs.c,v 1.45 2015/09/01 06:10:16 dholland Exp $	*/
+/*	$NetBSD: make_lfs.c,v 1.46 2015/09/01 06:12:04 dholland 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.45 2015/09/01 06:10:16 dholland Exp $");
+__RCSID("$NetBSD: make_lfs.c,v 1.46 2015/09/01 06:12:04 dholland Exp $");
 #endif
 #endif /* not lint */
 
@@ -189,7 +189,7 @@ static const struct dlfs64 dlfs64_defaul
 		.dlfs_avail =		0,
 		.dlfs_idaddr =		0,
 		.dlfs_uinodes =		0,
-		.dlfs_ifile =		LFS_IFILE_INUM,
+		.dlfs_unused_0 =	0,
 		.dlfs_lastseg =		0,
 		.dlfs_nextseg =		0,
 		.dlfs_curseg =		0,

Index: src/sys/lib/libsa/ufs.c
diff -u src/sys/lib/libsa/ufs.c:1.72 src/sys/lib/libsa/ufs.c:1.73
--- src/sys/lib/libsa/ufs.c:1.72	Wed Aug 12 18:28:01 2015
+++ src/sys/lib/libsa/ufs.c	Tue Sep  1 06:12:04 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: ufs.c,v 1.72 2015/08/12 18:28:01 dholland Exp $	*/
+/*	$NetBSD: ufs.c,v 1.73 2015/09/01 06:12:04 dholland Exp $	*/
 
 /*-
  * Copyright (c) 1993
@@ -218,7 +218,7 @@ find_inode_sector(ino32_t inumber, struc
 	size_t entsize;
 	int rc;
 
-	rc = read_inode(lfs_sb_getifile(fs), f);
+	rc = read_inode(LFS_IFILE_INUM, f);
 	if (rc)
 		return rc;
 
@@ -260,7 +260,7 @@ read_inode(ino32_t inumber, struct open_
 #endif
 
 #ifdef LIBSA_LFS
-	if (inumber == lfs_sb_getifile(fs))
+	if (inumber == LFS_IFILE_INUM)
 		inode_sector = FSBTODB(fs, lfs_sb_getidaddr(fs));
 	else if ((rc = find_inode_sector(inumber, f, &inode_sector)) != 0)
 		return rc;

Index: src/sys/ufs/lfs/lfs.h
diff -u src/sys/ufs/lfs/lfs.h:1.182 src/sys/ufs/lfs/lfs.h:1.183
--- src/sys/ufs/lfs/lfs.h:1.182	Tue Sep  1 06:11:06 2015
+++ src/sys/ufs/lfs/lfs.h	Tue Sep  1 06:12:04 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: lfs.h,v 1.182 2015/09/01 06:11:06 dholland Exp $	*/
+/*	$NetBSD: lfs.h,v 1.183 2015/09/01 06:12:04 dholland Exp $	*/
 
 /*  from NetBSD: dinode.h,v 1.22 2013/01/22 09:39:18 dholland Exp  */
 /*  from NetBSD: dir.h,v 1.21 2009/07/22 04:49:19 dholland Exp  */
@@ -795,7 +795,7 @@ struct dlfs64 {
 	int64_t	  dlfs_avail;	  /* 64: blocks available for writing */
 	int64_t	  dlfs_idaddr;	  /* 72: inode file disk address */
 	int32_t	  dlfs_uinodes;	  /* 80: inodes in cache not yet on disk */
-	u_int32_t dlfs_ifile;	  /* 84: inode file inode number */
+	u_int32_t dlfs_unused_0;  /* 84: not used */
 	int64_t	  dlfs_lastseg;	  /* 88: address of last segment written */
 	int64_t	  dlfs_nextseg;	  /* 96: address of next segment to write */
 	int64_t	  dlfs_curseg;	  /* 104: current segment being written */

Index: src/sys/ufs/lfs/lfs_accessors.h
diff -u src/sys/ufs/lfs/lfs_accessors.h:1.18 src/sys/ufs/lfs/lfs_accessors.h:1.19
--- src/sys/ufs/lfs/lfs_accessors.h:1.18	Tue Sep  1 06:11:06 2015
+++ src/sys/ufs/lfs/lfs_accessors.h	Tue Sep  1 06:12:04 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: lfs_accessors.h,v 1.18 2015/09/01 06:11:06 dholland Exp $	*/
+/*	$NetBSD: lfs_accessors.h,v 1.19 2015/09/01 06:12:04 dholland Exp $	*/
 
 /*  from NetBSD: lfs.h,v 1.165 2015/07/24 06:59:32 dholland Exp  */
 /*  from NetBSD: dinode.h,v 1.22 2013/01/22 09:39:18 dholland Exp  */
@@ -925,7 +925,7 @@ LFS_DEF_SB_ACCESSOR_FULL(uint64_t, uint3
 LFS_DEF_SB_ACCESSOR_FULL(int64_t, int32_t, avail);
 LFS_DEF_SB_ACCESSOR(int32_t, uinodes);
 LFS_DEF_SB_ACCESSOR_FULL(int64_t, int32_t, idaddr);
-LFS_DEF_SB_ACCESSOR(u_int32_t, ifile);
+LFS_DEF_SB_ACCESSOR_32ONLY(u_int32_t, ifile, LFS_IFILE_INUM);
 LFS_DEF_SB_ACCESSOR_FULL(int64_t, int32_t, lastseg);
 LFS_DEF_SB_ACCESSOR_FULL(int64_t, int32_t, nextseg);
 LFS_DEF_SB_ACCESSOR_FULL(int64_t, int32_t, curseg);

Index: src/sys/ufs/lfs/lfs_debug.c
diff -u src/sys/ufs/lfs/lfs_debug.c:1.53 src/sys/ufs/lfs/lfs_debug.c:1.54
--- src/sys/ufs/lfs/lfs_debug.c:1.53	Tue Sep  1 06:11:06 2015
+++ src/sys/ufs/lfs/lfs_debug.c	Tue Sep  1 06:12:04 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: lfs_debug.c,v 1.53 2015/09/01 06:11:06 dholland Exp $	*/
+/*	$NetBSD: lfs_debug.c,v 1.54 2015/09/01 06:12:04 dholland Exp $	*/
 
 /*-
  * Copyright (c) 1999, 2000, 2001, 2002, 2003 The NetBSD Foundation, Inc.
@@ -60,7 +60,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lfs_debug.c,v 1.53 2015/09/01 06:11:06 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_debug.c,v 1.54 2015/09/01 06:12:04 dholland Exp $");
 
 #ifdef DEBUG
 
@@ -176,10 +176,9 @@ lfs_dump_super(struct lfs *lfsp)
 	printf("\n");
 
 	printf("Checkpoint Info\n");
-	printf("%s%ju\t%s%jx\t%s%d\n",
+	printf("%s%ju\t%s%jx\n",
 	       "freehd	 ", (uintmax_t)lfs_sb_getfreehd(lfsp),
-	       "idaddr	 ", (intmax_t)lfs_sb_getidaddr(lfsp),
-	       "ifile	 ", lfs_sb_getifile(lfsp));
+	       "idaddr	 ", (intmax_t)lfs_sb_getidaddr(lfsp));
 	printf("%s%jx\t%s%ju\t%s%jx\t%s%jx\t%s%jx\t%s%jx\n",
 	       "bfree	 ", (intmax_t)lfs_sb_getbfree(lfsp),
 	       "nfiles	 ", (uintmax_t)lfs_sb_getnfiles(lfsp),
@@ -188,6 +187,12 @@ lfs_dump_super(struct lfs *lfsp)
 	       "curseg	 ", (intmax_t)lfs_sb_getcurseg(lfsp),
 	       "offset	 ", (intmax_t)lfs_sb_getoffset(lfsp));
 	printf("tstamp	 %llx\n", (long long)lfs_sb_gettstamp(lfsp));
+
+	if (!lfsp->lfs_is64) {
+		printf("32-bit only derived or constant fields\n");
+		printf("%s%u\n",
+		       "ifile	 ", lfs_sb_getifile(lfsp));
+	}
 }
 
 void

Index: src/usr.sbin/dumplfs/dumplfs.c
diff -u src/usr.sbin/dumplfs/dumplfs.c:1.56 src/usr.sbin/dumplfs/dumplfs.c:1.57
--- src/usr.sbin/dumplfs/dumplfs.c:1.56	Tue Sep  1 06:11:06 2015
+++ src/usr.sbin/dumplfs/dumplfs.c	Tue Sep  1 06:12:04 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: dumplfs.c,v 1.56 2015/09/01 06:11:06 dholland Exp $	*/
+/*	$NetBSD: dumplfs.c,v 1.57 2015/09/01 06:12:04 dholland Exp $	*/
 
 /*-
  * Copyright (c) 1991, 1993
@@ -40,7 +40,7 @@ __COPYRIGHT("@(#) Copyright (c) 1991, 19
 #if 0
 static char sccsid[] = "@(#)dumplfs.c	8.5 (Berkeley) 5/24/95";
 #else
-__RCSID("$NetBSD: dumplfs.c,v 1.56 2015/09/01 06:11:06 dholland Exp $");
+__RCSID("$NetBSD: dumplfs.c,v 1.57 2015/09/01 06:12:04 dholland Exp $");
 #endif
 #endif /* not lint */
 
@@ -816,10 +816,9 @@ dump_super(struct lfs *lfsp)
   	(void)printf("\n");
  	
  	(void)printf("  Checkpoint Info\n");
- 	(void)printf("    %s%-10ju  %s0x%-8jx  %s%-10ju\n",
+ 	(void)printf("    %s%-10ju  %s0x%-8jx\n",
  		     "freehd   ", (uintmax_t)lfs_sb_getfreehd(lfsp),
- 		     "idaddr   ", (intmax_t)lfs_sb_getidaddr(lfsp),
- 		     "ifile    ", (uintmax_t)lfs_sb_getifile(lfsp));
+ 		     "idaddr   ", (intmax_t)lfs_sb_getidaddr(lfsp));
  	(void)printf("    %s%-10d  %s%-10jd  %s%-10jd\n",
  		     "uinodes  ", lfs_sb_getuinodes(lfsp),
  		     "bfree    ", (intmax_t)lfs_sb_getbfree(lfsp),
@@ -834,6 +833,12 @@ dump_super(struct lfs *lfsp)
 		     "serial   ", (uintmax_t)lfs_sb_getserial(lfsp));
 	stamp = lfs_sb_gettstamp(lfsp);
  	(void)printf("    tstamp   %s", ctime(&stamp));
+
+	if (!lfsp->lfs_is64) {
+		(void)printf("  32-bit only derived or constant fields\n");
+		(void)printf("    %s%-10u\n",
+ 		     "ifile    ", lfs_sb_getifile(lfsp));
+	}
 }
 
 static void

Reply via email to