Module Name: src Committed By: dholland Date: Tue Sep 1 06:11:06 UTC 2015
Modified Files: src/sbin/fsck_lfs: pass0.c src/sys/ufs/lfs: lfs.h lfs_accessors.h lfs_debug.c lfs_vfsops.c src/usr.sbin/dumplfs: dumplfs.c Log Message: Make the inode fields in the 64-bit superblock 64 bits wide. Reasoning as before. Note that I am not going through and checking for 64->32 truncations in inode numbers; I'm sure there are quite a few, but that's a project for later. To generate a diff of this commit: cvs rdiff -u -r1.41 -r1.42 src/sbin/fsck_lfs/pass0.c cvs rdiff -u -r1.181 -r1.182 src/sys/ufs/lfs/lfs.h cvs rdiff -u -r1.17 -r1.18 src/sys/ufs/lfs/lfs_accessors.h cvs rdiff -u -r1.52 -r1.53 src/sys/ufs/lfs/lfs_debug.c cvs rdiff -u -r1.343 -r1.344 src/sys/ufs/lfs/lfs_vfsops.c cvs rdiff -u -r1.55 -r1.56 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/sbin/fsck_lfs/pass0.c diff -u src/sbin/fsck_lfs/pass0.c:1.41 src/sbin/fsck_lfs/pass0.c:1.42 --- src/sbin/fsck_lfs/pass0.c:1.41 Sun Aug 23 16:00:23 2015 +++ src/sbin/fsck_lfs/pass0.c Tue Sep 1 06:11:06 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: pass0.c,v 1.41 2015/08/23 16:00:23 christos Exp $ */ +/* $NetBSD: pass0.c,v 1.42 2015/09/01 06:11:06 dholland Exp $ */ /*- * Copyright (c) 1999, 2000, 2001, 2002, 2003 The NetBSD Foundation, Inc. @@ -200,8 +200,8 @@ pass0(void) writeit = 1; } if (freehd != lfs_sb_getfreehd(fs)) { - pwarn("FREE LIST HEAD IN SUPERBLOCK SHOULD BE %ju (WAS %u)\n", - (uintmax_t)freehd, lfs_sb_getfreehd(fs)); + pwarn("FREE LIST HEAD IN SUPERBLOCK SHOULD BE %ju (WAS %ju)\n", + (uintmax_t)freehd, (uintmax_t)lfs_sb_getfreehd(fs)); if (preen || reply("FIX")) { lfs_sb_setfreehd(fs, freehd); sbdirty(); Index: src/sys/ufs/lfs/lfs.h diff -u src/sys/ufs/lfs/lfs.h:1.181 src/sys/ufs/lfs/lfs.h:1.182 --- src/sys/ufs/lfs/lfs.h:1.181 Tue Sep 1 06:10:16 2015 +++ src/sys/ufs/lfs/lfs.h Tue Sep 1 06:11:06 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: lfs.h,v 1.181 2015/09/01 06:10:16 dholland Exp $ */ +/* $NetBSD: lfs.h,v 1.182 2015/09/01 06:11:06 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 */ @@ -789,63 +789,63 @@ struct dlfs64 { u_int32_t dlfs_frag; /* 36: number of frags in a block in fs */ /* Checkpoint region. */ - u_int32_t dlfs_freehd; /* 40: start of the free inode list */ - u_int32_t dlfs_nfiles; /* 44: number of allocated inodes */ - int64_t dlfs_bfree; /* 48: number of free frags */ - int64_t dlfs_avail; /* 56: blocks available for writing */ - int64_t dlfs_idaddr; /* 64: inode file disk address */ - int32_t dlfs_uinodes; /* 72: inodes in cache not yet on disk */ - u_int32_t dlfs_ifile; /* 76: inode file inode number */ - int64_t dlfs_lastseg; /* 80: address of last segment written */ - int64_t dlfs_nextseg; /* 88: address of next segment to write */ - int64_t dlfs_curseg; /* 96: current segment being written */ - int64_t dlfs_offset; /* 104: offset in curseg for next partial */ - int64_t dlfs_lastpseg; /* 112: address of last partial written */ - u_int32_t dlfs_inopf; /* 120: inodes per frag */ + u_int64_t dlfs_freehd; /* 40: start of the free inode list */ + u_int64_t dlfs_nfiles; /* 48: number of allocated inodes */ + int64_t dlfs_bfree; /* 56: number of free frags */ + 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 */ + 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 */ + int64_t dlfs_offset; /* 112: offset in curseg for next partial */ + int64_t dlfs_lastpseg; /* 120: address of last partial written */ + u_int32_t dlfs_inopf; /* 128: inodes per frag */ /* These are configuration parameters. */ - u_int32_t dlfs_minfree; /* 124: minimum percentage of free blocks */ + u_int32_t dlfs_minfree; /* 132: minimum percentage of free blocks */ /* These fields can be computed from the others. */ - u_int64_t dlfs_maxfilesize; /* 128: maximum representable file size */ - u_int32_t dlfs_fsbpseg; /* 136: frags (fsb) per segment */ - u_int32_t dlfs_inopb; /* 140: inodes per block */ - u_int32_t dlfs_ifpb; /* 144: IFILE entries per block */ - u_int32_t dlfs_sepb; /* 148: SEGUSE entries per block */ - u_int32_t dlfs_nindir; /* 152: indirect pointers per block */ - u_int32_t dlfs_nseg; /* 156: number of segments */ - u_int32_t dlfs_nspf; /* 160: number of sectors per fragment */ - u_int32_t dlfs_cleansz; /* 164: cleaner info size in blocks */ - u_int32_t dlfs_segtabsz; /* 168: segment table size in blocks */ - u_int32_t dlfs_bshift; /* 172: calc block number from file offset */ - u_int32_t dlfs_ffshift; /* 176: fast mult/div for frag from file */ - u_int32_t dlfs_fbshift; /* 180: fast mult/div for frag from block */ - u_int64_t dlfs_bmask; /* 184: calc block offset from file offset */ - u_int64_t dlfs_ffmask; /* 192: calc frag offset from file offset */ - u_int64_t dlfs_fbmask; /* 200: calc frag offset from block offset */ - u_int32_t dlfs_blktodb; /* 208: blktodb and dbtoblk shift constant */ - u_int32_t dlfs_sushift; /* 212: fast mult/div for segusage table */ + u_int64_t dlfs_maxfilesize; /* 136: maximum representable file size */ + u_int32_t dlfs_fsbpseg; /* 144: frags (fsb) per segment */ + u_int32_t dlfs_inopb; /* 148: inodes per block */ + u_int32_t dlfs_ifpb; /* 152: IFILE entries per block */ + u_int32_t dlfs_sepb; /* 156: SEGUSE entries per block */ + u_int32_t dlfs_nindir; /* 160: indirect pointers per block */ + u_int32_t dlfs_nseg; /* 164: number of segments */ + u_int32_t dlfs_nspf; /* 168: number of sectors per fragment */ + u_int32_t dlfs_cleansz; /* 172: cleaner info size in blocks */ + u_int32_t dlfs_segtabsz; /* 176: segment table size in blocks */ + u_int32_t dlfs_bshift; /* 180: calc block number from file offset */ + u_int32_t dlfs_ffshift; /* 184: fast mult/div for frag from file */ + u_int32_t dlfs_fbshift; /* 188: fast mult/div for frag from block */ + u_int64_t dlfs_bmask; /* 192: calc block offset from file offset */ + u_int64_t dlfs_ffmask; /* 200: calc frag offset from file offset */ + u_int64_t dlfs_fbmask; /* 208: calc frag offset from block offset */ + u_int32_t dlfs_blktodb; /* 216: blktodb and dbtoblk shift constant */ + u_int32_t dlfs_sushift; /* 220: fast mult/div for segusage table */ - /* 216: superblock disk offsets */ + /* 224: superblock disk offsets */ int64_t dlfs_sboffs[LFS_MAXNUMSB]; - int32_t dlfs_maxsymlinklen; /* 296: max len of an internal symlink */ - u_int32_t dlfs_nclean; /* 300: Number of clean segments */ - u_char dlfs_fsmnt[MNAMELEN]; /* 304: name mounted on */ - u_int16_t dlfs_pflags; /* 394: file system persistent flags */ - int32_t dlfs_dmeta; /* 396: total number of dirty summaries */ - u_int32_t dlfs_minfreeseg; /* 400: segments not counted in bfree */ - u_int32_t dlfs_sumsize; /* 404: size of summary blocks */ - u_int32_t dlfs_ibsize; /* 408: size of inode blocks */ - u_int32_t dlfs_inodefmt; /* 412: inode format version */ - u_int64_t dlfs_serial; /* 416: serial number */ - int64_t dlfs_s0addr; /* 424: start of segment 0 */ - u_int64_t dlfs_tstamp; /* 432: time stamp */ - u_int32_t dlfs_interleave; /* 440: segment interleave */ - u_int32_t dlfs_ident; /* 444: per-fs identifier */ - u_int32_t dlfs_fsbtodb; /* 448: fsbtodb and dbtodsb shift constant */ - u_int32_t dlfs_resvseg; /* 452: segments reserved for the cleaner */ - int8_t dlfs_pad[52]; /* 456: round to 512 bytes */ + int32_t dlfs_maxsymlinklen; /* 304: max len of an internal symlink */ + u_int32_t dlfs_nclean; /* 308: Number of clean segments */ + u_char dlfs_fsmnt[MNAMELEN]; /* 312: name mounted on */ + u_int16_t dlfs_pflags; /* 402: file system persistent flags */ + int32_t dlfs_dmeta; /* 404: total number of dirty summaries */ + u_int32_t dlfs_minfreeseg; /* 408: segments not counted in bfree */ + u_int32_t dlfs_sumsize; /* 412: size of summary blocks */ + u_int32_t dlfs_ibsize; /* 416: size of inode blocks */ + u_int32_t dlfs_inodefmt; /* 420: inode format version */ + u_int64_t dlfs_serial; /* 424: serial number */ + int64_t dlfs_s0addr; /* 432: start of segment 0 */ + u_int64_t dlfs_tstamp; /* 440: time stamp */ + u_int32_t dlfs_interleave; /* 448: segment interleave */ + u_int32_t dlfs_ident; /* 452: per-fs identifier */ + u_int32_t dlfs_fsbtodb; /* 456: fsbtodb and dbtodsb shift constant */ + u_int32_t dlfs_resvseg; /* 460: segments reserved for the cleaner */ + int8_t dlfs_pad[44]; /* 464: round to 512 bytes */ /* Checksum -- last valid disk field. */ u_int32_t dlfs_cksum; /* 508: checksum for superblock checking */ }; Index: src/sys/ufs/lfs/lfs_accessors.h diff -u src/sys/ufs/lfs/lfs_accessors.h:1.17 src/sys/ufs/lfs/lfs_accessors.h:1.18 --- src/sys/ufs/lfs/lfs_accessors.h:1.17 Tue Sep 1 06:10:16 2015 +++ src/sys/ufs/lfs/lfs_accessors.h Tue Sep 1 06:11:06 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: lfs_accessors.h,v 1.17 2015/09/01 06:10:16 dholland Exp $ */ +/* $NetBSD: lfs_accessors.h,v 1.18 2015/09/01 06:11:06 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 */ @@ -919,9 +919,9 @@ LFS_DEF_SB_ACCESSOR_FULL(u_int64_t, u_in LFS_DEF_SB_ACCESSOR(u_int32_t, bsize); LFS_DEF_SB_ACCESSOR(u_int32_t, fsize); LFS_DEF_SB_ACCESSOR(u_int32_t, frag); -LFS_DEF_SB_ACCESSOR(u_int32_t, freehd); +LFS_DEF_SB_ACCESSOR_FULL(uint64_t, uint32_t, freehd); LFS_DEF_SB_ACCESSOR_FULL(int64_t, int32_t, bfree); -LFS_DEF_SB_ACCESSOR(u_int32_t, nfiles); +LFS_DEF_SB_ACCESSOR_FULL(uint64_t, uint32_t, nfiles); 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); Index: src/sys/ufs/lfs/lfs_debug.c diff -u src/sys/ufs/lfs/lfs_debug.c:1.52 src/sys/ufs/lfs/lfs_debug.c:1.53 --- src/sys/ufs/lfs/lfs_debug.c:1.52 Wed Aug 12 18:28:01 2015 +++ src/sys/ufs/lfs/lfs_debug.c Tue Sep 1 06:11:06 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: lfs_debug.c,v 1.52 2015/08/12 18:28:01 dholland Exp $ */ +/* $NetBSD: lfs_debug.c,v 1.53 2015/09/01 06:11:06 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.52 2015/08/12 18:28:01 dholland Exp $"); +__KERNEL_RCSID(0, "$NetBSD: lfs_debug.c,v 1.53 2015/09/01 06:11:06 dholland Exp $"); #ifdef DEBUG @@ -176,13 +176,13 @@ lfs_dump_super(struct lfs *lfsp) printf("\n"); printf("Checkpoint Info\n"); - printf("%s%d\t%s%jx\t%s%d\n", - "freehd ", lfs_sb_getfreehd(lfsp), + printf("%s%ju\t%s%jx\t%s%d\n", + "freehd ", (uintmax_t)lfs_sb_getfreehd(lfsp), "idaddr ", (intmax_t)lfs_sb_getidaddr(lfsp), "ifile ", lfs_sb_getifile(lfsp)); - printf("%s%jx\t%s%d\t%s%jx\t%s%jx\t%s%jx\t%s%jx\n", + 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 ", lfs_sb_getnfiles(lfsp), + "nfiles ", (uintmax_t)lfs_sb_getnfiles(lfsp), "lastseg ", (intmax_t)lfs_sb_getlastseg(lfsp), "nextseg ", (intmax_t)lfs_sb_getnextseg(lfsp), "curseg ", (intmax_t)lfs_sb_getcurseg(lfsp), Index: src/sys/ufs/lfs/lfs_vfsops.c diff -u src/sys/ufs/lfs/lfs_vfsops.c:1.343 src/sys/ufs/lfs/lfs_vfsops.c:1.344 --- src/sys/ufs/lfs/lfs_vfsops.c:1.343 Tue Sep 1 06:10:16 2015 +++ src/sys/ufs/lfs/lfs_vfsops.c Tue Sep 1 06:11:06 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: lfs_vfsops.c,v 1.343 2015/09/01 06:10:16 dholland Exp $ */ +/* $NetBSD: lfs_vfsops.c,v 1.344 2015/09/01 06:11:06 dholland 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.343 2015/09/01 06:10:16 dholland Exp $"); +__KERNEL_RCSID(0, "$NetBSD: lfs_vfsops.c,v 1.344 2015/09/01 06:11:06 dholland Exp $"); #if defined(_KERNEL_OPT) #include "opt_lfs.h" @@ -843,6 +843,9 @@ lfs_mountfs(struct vnode *devvp, struct cred = l ? l->l_cred : NOCRED; + /* The superblock is supposed to be 512 bytes. */ + __CTASSERT(sizeof(struct dlfs) == DEV_BSIZE); + /* * Flush out any old buffers remaining from a previous use. */ Index: src/usr.sbin/dumplfs/dumplfs.c diff -u src/usr.sbin/dumplfs/dumplfs.c:1.55 src/usr.sbin/dumplfs/dumplfs.c:1.56 --- src/usr.sbin/dumplfs/dumplfs.c:1.55 Sat Aug 29 05:33:20 2015 +++ src/usr.sbin/dumplfs/dumplfs.c Tue Sep 1 06:11:06 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: dumplfs.c,v 1.55 2015/08/29 05:33:20 dholland Exp $ */ +/* $NetBSD: dumplfs.c,v 1.56 2015/09/01 06:11:06 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.55 2015/08/29 05:33:20 dholland Exp $"); +__RCSID("$NetBSD: dumplfs.c,v 1.56 2015/09/01 06:11:06 dholland Exp $"); #endif #endif /* not lint */ @@ -816,16 +816,16 @@ dump_super(struct lfs *lfsp) (void)printf("\n"); (void)printf(" Checkpoint Info\n"); - (void)printf(" %s%-10d %s0x%-8jx %s%-10d\n", - "freehd ", lfs_sb_getfreehd(lfsp), + (void)printf(" %s%-10ju %s0x%-8jx %s%-10ju\n", + "freehd ", (uintmax_t)lfs_sb_getfreehd(lfsp), "idaddr ", (intmax_t)lfs_sb_getidaddr(lfsp), - "ifile ", lfs_sb_getifile(lfsp)); + "ifile ", (uintmax_t)lfs_sb_getifile(lfsp)); (void)printf(" %s%-10d %s%-10jd %s%-10jd\n", "uinodes ", lfs_sb_getuinodes(lfsp), "bfree ", (intmax_t)lfs_sb_getbfree(lfsp), "avail ", (intmax_t)lfs_sb_getavail(lfsp)); - (void)printf(" %s%-10d %s0x%-8jx %s0x%-8jx\n", - "nfiles ", lfs_sb_getnfiles(lfsp), + (void)printf(" %s%-10ju %s0x%-8jx %s0x%-8jx\n", + "nfiles ", (uintmax_t)lfs_sb_getnfiles(lfsp), "lastseg ", (uintmax_t)lfs_sb_getlastseg(lfsp), "nextseg ", (uintmax_t)lfs_sb_getnextseg(lfsp)); (void)printf(" %s0x%-8jx %s0x%-8jx %s%-10ju\n",