Module Name: src
Committed By: christos
Date: Sun Jun 19 22:41:31 UTC 2016
Modified Files:
src/sys/ufs/ffs: ffs_vfsops.c
Log Message:
Relax the dup alloc tests to not include the on-disk data for ffsv2, since
nothing checks that the lazy-initialized inodes are correct and if they happen
to get corrupted, there is no way to fix them.
To generate a diff of this commit:
cvs rdiff -u -r1.338 -r1.339 src/sys/ufs/ffs/ffs_vfsops.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/ufs/ffs/ffs_vfsops.c
diff -u src/sys/ufs/ffs/ffs_vfsops.c:1.338 src/sys/ufs/ffs/ffs_vfsops.c:1.339
--- src/sys/ufs/ffs/ffs_vfsops.c:1.338 Wed Dec 23 18:31:28 2015
+++ src/sys/ufs/ffs/ffs_vfsops.c Sun Jun 19 18:41:31 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: ffs_vfsops.c,v 1.338 2015/12/23 23:31:28 christos Exp $ */
+/* $NetBSD: ffs_vfsops.c,v 1.339 2016/06/19 22:41:31 christos Exp $ */
/*-
* Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -61,7 +61,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ffs_vfsops.c,v 1.338 2015/12/23 23:31:28 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ffs_vfsops.c,v 1.339 2016/06/19 22:41:31 christos Exp $");
#if defined(_KERNEL_OPT)
#include "opt_ffs.h"
@@ -765,7 +765,7 @@ ffs_reload(struct mount *mp, kauth_cred_
error = vinvalbuf(devvp, 0, cred, l, 0, 0);
VOP_UNLOCK(devvp);
if (error)
- panic("ffs_reload: dirty1");
+ panic("%s: dirty1", __func__);
/*
* Step 2: re-read superblock from disk. XXX: We don't handle
@@ -922,7 +922,7 @@ ffs_reload(struct mount *mp, kauth_cred_
continue;
}
if (vinvalbuf(vp, 0, cred, l, 0, 0))
- panic("ffs_reload: dirty2");
+ panic("%s: dirty2", __func__);
/*
* Step 6: re-read inode data for all active vnodes.
*/
@@ -1902,8 +1902,7 @@ ffs_sync(struct mount *mp, int waitfor,
fs = ump->um_fs;
if (fs->fs_fmod != 0 && fs->fs_ronly != 0) { /* XXX */
- printf("fs = %s\n", fs->fs_fsmnt);
- panic("update: rofs mod");
+ panic("%s: rofs mod, fs=%s", __func__, fs->fs_fsmnt);
}
fstrans_start(mp, FSTRANS_SHARED);
@@ -2141,14 +2140,22 @@ ffs_newvnode(struct mount *mp, struct vn
}
ip = VTOI(vp);
- if (ip->i_mode || DIP(ip, size) || DIP(ip, blocks)) {
- printf("free ino %" PRId64 " on %s:\n", ino, fs->fs_fsmnt);
- printf("dmode %x mode %x dgen %x gen %x\n",
- DIP(ip, mode), ip->i_mode,
- DIP(ip, gen), ip->i_gen);
- printf("size %" PRIx64 " blocks %" PRIx64 "\n",
- DIP(ip, size), DIP(ip, blocks));
- panic("ffs_init_vnode: dup alloc");
+ if (ip->i_mode) {
+ panic("%s: dup alloc ino=%" PRId64 " on %s: mode %x/%x "
+ "gen %x/%x size %" PRIx64 " blocks %" PRIx64,
+ __func__, ino, fs->fs_fsmnt, DIP(ip, mode), ip->i_mode,
+ DIP(ip, gen), ip->i_gen, DIP(ip, size), DIP(ip, blocks));
+ }
+ if (DIP(ip, size) || DIP(ip, blocks)) {
+ printf("%s: ino=%" PRId64 " on %s: "
+ "gen %x/%x has non zero blocks %" PRIx64 " or size %"
+ PRIx64 "\n",
+ __func__, ino, fs->fs_fsmnt, DIP(ip, gen), ip->i_gen,
+ DIP(ip, blocks), DIP(ip, size));
+ if ((ip)->i_ump->um_fstype == UFS1)
+ panic("%s: dirty filesystem?", __func__);
+ DIP_ASSIGN(ip, blocks, 0);
+ DIP_ASSIGN(ip, size, 0);
}
/* Set uid / gid. */