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