Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sbin/fsck_ext2fs Correct bogons in filetype option support, ...
details: https://anonhg.NetBSD.org/src/rev/3cd43e66ff8f
branches: trunk
changeset: 481419:3cd43e66ff8f
user: bouyer <bouyer%NetBSD.org@localhost>
date: Fri Jan 28 16:01:46 2000 +0000
description:
Correct bogons in filetype option support, and add support for the
sparse_super option.
diffstat:
sbin/fsck_ext2fs/Makefile | 4 +-
sbin/fsck_ext2fs/dir.c | 18 ++++++------
sbin/fsck_ext2fs/fsck.h | 4 +-
sbin/fsck_ext2fs/inode.c | 38 ++++++++++++------------
sbin/fsck_ext2fs/main.c | 8 +++--
sbin/fsck_ext2fs/pass1.c | 44 ++++++++++++++++++++++-------
sbin/fsck_ext2fs/pass2.c | 23 ++++++++-------
sbin/fsck_ext2fs/pass5.c | 15 ++++-----
sbin/fsck_ext2fs/setup.c | 70 ++++++++++++++++++----------------------------
9 files changed, 117 insertions(+), 107 deletions(-)
diffs (truncated from 563 to 300 lines):
diff -r 2adccbd8b297 -r 3cd43e66ff8f sbin/fsck_ext2fs/Makefile
--- a/sbin/fsck_ext2fs/Makefile Fri Jan 28 16:00:23 2000 +0000
+++ b/sbin/fsck_ext2fs/Makefile Fri Jan 28 16:01:46 2000 +0000
@@ -1,10 +1,10 @@
-# $NetBSD: Makefile,v 1.7 1999/01/15 13:32:06 bouyer Exp $
+# $NetBSD: Makefile,v 1.8 2000/01/28 16:01:46 bouyer Exp $
# @(#)Makefile 8.1 (Berkeley) 6/5/93
PROG= fsck_ext2fs
MAN= fsck_ext2fs.8
SRCS= dir.c inode.c main.c pass1.c pass1b.c pass2.c pass3.c pass4.c \
- pass5.c fsutil.c setup.c utilities.c
+ pass5.c fsutil.c setup.c utilities.c ext2fs_bswap.c
FSCK= ${.CURDIR}/../fsck
CPPFLAGS+= -I${FSCK}
.PATH: ${.CURDIR}/../../sys/ufs/ext2fs ${FSCK}
diff -r 2adccbd8b297 -r 3cd43e66ff8f sbin/fsck_ext2fs/dir.c
--- a/sbin/fsck_ext2fs/dir.c Fri Jan 28 16:00:23 2000 +0000
+++ b/sbin/fsck_ext2fs/dir.c Fri Jan 28 16:01:46 2000 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: dir.c,v 1.4 2000/01/26 16:21:31 bouyer Exp $ */
+/* $NetBSD: dir.c,v 1.5 2000/01/28 16:01:46 bouyer Exp $ */
/*
* Copyright (c) 1997 Manuel Bouyer.
@@ -39,7 +39,7 @@
#if 0
static char sccsid[] = "@(#)dir.c 8.5 (Berkeley) 12/8/94";
#else
-__RCSID("$NetBSD: dir.c,v 1.4 2000/01/26 16:21:31 bouyer Exp $");
+__RCSID("$NetBSD: dir.c,v 1.5 2000/01/28 16:01:46 bouyer Exp $");
#endif
#endif /* not lint */
@@ -64,8 +64,8 @@
int lfmode = 01777;
struct ext2fs_dirtemplate emptydir = { 0, DIRBLKSIZ };
struct ext2fs_dirtemplate dirhead = {
- 0, 12, 1, IFTODT(EXT2_IFDIR), ".",
- 0, DIRBLKSIZ - 12, 2, IFTODT(EXT2_IFDIR), ".."
+ 0, 12, 1, EXT2_FT_DIR, ".",
+ 0, DIRBLKSIZ - 12, 2, EXT2_FT_DIR, ".."
};
#undef DIRBLKSIZ
@@ -245,7 +245,7 @@
return (0);
if (dp->e2d_ino == 0)
return (1);
- if (sblock.e2fs.e2fs_rev < E2FS_REV0 ||
+ if (sblock.e2fs.e2fs_rev < E2FS_REV1 ||
(sblock.e2fs.e2fs_features_incompat & EXT2F_INCOMPAT_FTYPE) == 0)
if (dp->e2d_type != 0)
return (1);
@@ -335,7 +335,7 @@
newent.e2d_namlen = strlen(idesc->id_name);
if (sblock.e2fs.e2fs_rev > E2FS_REV0 &&
(sblock.e2fs.e2fs_features_incompat & EXT2F_INCOMPAT_FTYPE))
- newent.e2d_type = typemap[idesc->id_parent];
+ newent.e2d_type = inot2ext2dt(typemap[idesc->id_parent]);
newlen = EXT2FS_DIRSIZ(newent.e2d_namlen);
if (dirp->e2d_ino != 0)
oldlen = EXT2FS_DIRSIZ(dirp->e2d_namlen);
@@ -367,7 +367,7 @@
dirp->e2d_ino = h2fs32(idesc->id_parent);
if (sblock.e2fs.e2fs_rev > E2FS_REV0 &&
(sblock.e2fs.e2fs_features_incompat & EXT2F_INCOMPAT_FTYPE))
- dirp->e2d_type = typemap[idesc->id_parent];
+ dirp->e2d_type = inot2ext2dt(typemap[idesc->id_parent]);
else
dirp->e2d_type = 0;
return (ALTERED|STOP);
@@ -615,13 +615,13 @@
dirhead.dot_namlen = 1;
if (sblock.e2fs.e2fs_rev > E2FS_REV0 &&
(sblock.e2fs.e2fs_features_incompat & EXT2F_INCOMPAT_FTYPE))
- dirhead.dot_type = IFTODT(EXT2_IFDIR);
+ dirhead.dot_type = EXT2_FT_DIR;
else
dirhead.dot_type = 0;
dirhead.dotdot_namlen = 2;
if (sblock.e2fs.e2fs_rev > E2FS_REV0 &&
(sblock.e2fs.e2fs_features_incompat & EXT2F_INCOMPAT_FTYPE))
- dirhead.dotdot_type = IFTODT(EXT2_IFDIR);
+ dirhead.dotdot_type = EXT2_FT_DIR;
else
dirhead.dotdot_type = 0;
dirp = &dirhead;
diff -r 2adccbd8b297 -r 3cd43e66ff8f sbin/fsck_ext2fs/fsck.h
--- a/sbin/fsck_ext2fs/fsck.h Fri Jan 28 16:00:23 2000 +0000
+++ b/sbin/fsck_ext2fs/fsck.h Fri Jan 28 16:01:46 2000 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: fsck.h,v 1.3 2000/01/26 16:21:31 bouyer Exp $ */
+/* $NetBSD: fsck.h,v 1.4 2000/01/28 16:01:46 bouyer Exp $ */
/*
* Copyright (c) 1997 Manuel Bouyer.
@@ -179,7 +179,6 @@
int rerun; /* rerun fsck. Only used in non-preen mode */
daddr_t maxfsblock; /* number of blocks in the file system */
-daddr_t cgoverhead; /* overhead per cg */
char *blockmap; /* ptr to primary blk allocation map */
ino_t maxino; /* number of inodes in file system */
ino_t lastino; /* last inode in use */
@@ -212,3 +211,4 @@
void getblk __P((struct bufarea *, daddr_t, long));
ino_t allocino __P((ino_t, int));
void copyback_sb __P((struct bufarea*));
+daddr_t cgoverhead __P((int)); /* overhead per cg */
diff -r 2adccbd8b297 -r 3cd43e66ff8f sbin/fsck_ext2fs/inode.c
--- a/sbin/fsck_ext2fs/inode.c Fri Jan 28 16:00:23 2000 +0000
+++ b/sbin/fsck_ext2fs/inode.c Fri Jan 28 16:01:46 2000 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: inode.c,v 1.7 2000/01/26 16:21:32 bouyer Exp $ */
+/* $NetBSD: inode.c,v 1.8 2000/01/28 16:01:46 bouyer Exp $ */
/*
* Copyright (c) 1997 Manuel Bouyer.
@@ -39,7 +39,7 @@
#if 0
static char sccsid[] = "@(#)inode.c 8.5 (Berkeley) 2/8/95";
#else
-__RCSID("$NetBSD: inode.c,v 1.7 2000/01/26 16:21:32 bouyer Exp $");
+__RCSID("$NetBSD: inode.c,v 1.8 2000/01/28 16:01:46 bouyer Exp $");
#endif
#endif /* not lint */
@@ -50,7 +50,6 @@
#include <ufs/ext2fs/ext2fs.h>
#include <ufs/ufs/dinode.h> /* for IFMT & friends */
-#include <ufs/ufs/dir.h> /* for IFTODT & friends */
#ifndef SMALL
#include <pwd.h>
#endif
@@ -256,35 +255,36 @@
daddr_t blk;
int cnt;
{
- int c;
+ int c, overh;
if ((unsigned)(blk + cnt) > maxfsblock)
return (1);
c = dtog(&sblock, blk);
- if (blk < sblock.e2fs.e2fs_bpg * c + cgoverhead +
- sblock.e2fs.e2fs_first_dblock) {
- if ((blk + cnt) > sblock.e2fs.e2fs_bpg * c + cgoverhead +
- sblock.e2fs.e2fs_first_dblock) {
+ overh = cgoverhead(c);
+ if (blk < sblock.e2fs.e2fs_bpg * c + overh +
+ sblock.e2fs.e2fs_first_dblock) {
+ if ((blk + cnt) > sblock.e2fs.e2fs_bpg * c + overh +
+ sblock.e2fs.e2fs_first_dblock) {
if (debug) {
printf("blk %d < cgdmin %d;",
- blk, sblock.e2fs.e2fs_bpg * c + cgoverhead +
- sblock.e2fs.e2fs_first_dblock);
+ blk, sblock.e2fs.e2fs_bpg * c + overh +
+ sblock.e2fs.e2fs_first_dblock);
printf(" blk + cnt %d > cgsbase %d\n",
- blk + cnt, sblock.e2fs.e2fs_bpg * c + cgoverhead +
- sblock.e2fs.e2fs_first_dblock);
+ blk + cnt, sblock.e2fs.e2fs_bpg * c +
+ overh + sblock.e2fs.e2fs_first_dblock);
}
return (1);
}
} else {
- if ((blk + cnt) > sblock.e2fs.e2fs_bpg * (c + 1) + cgoverhead +
- sblock.e2fs.e2fs_first_dblock) {
+ if ((blk + cnt) > sblock.e2fs.e2fs_bpg * (c + 1) + overh +
+ sblock.e2fs.e2fs_first_dblock) {
if (debug) {
printf("blk %d >= cgdmin %d;",
- blk, sblock.e2fs.e2fs_bpg * c + cgoverhead +
- sblock.e2fs.e2fs_first_dblock);
+ blk, sblock.e2fs.e2fs_bpg * c + overh +
+ sblock.e2fs.e2fs_first_dblock);
printf(" blk + cnt %d > cgdmax %d\n",
- blk+cnt, sblock.e2fs.e2fs_bpg * (c + 1) + cgoverhead +
- sblock.e2fs.e2fs_first_dblock);
+ blk+cnt, sblock.e2fs.e2fs_bpg * (c + 1) +
+ overh + sblock.e2fs.e2fs_first_dblock);
}
return (1);
}
@@ -638,7 +638,7 @@
dp->e2di_nblock = h2fs32(btodb(sblock.e2fs_bsize));
n_files++;
inodirty();
- typemap[ino] = IFTODT(type);
+ typemap[ino] = E2IFTODT(type);
return (ino);
}
diff -r 2adccbd8b297 -r 3cd43e66ff8f sbin/fsck_ext2fs/main.c
--- a/sbin/fsck_ext2fs/main.c Fri Jan 28 16:00:23 2000 +0000
+++ b/sbin/fsck_ext2fs/main.c Fri Jan 28 16:01:46 2000 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: main.c,v 1.7 2000/01/26 16:21:32 bouyer Exp $ */
+/* $NetBSD: main.c,v 1.8 2000/01/28 16:01:46 bouyer Exp $ */
/*
* Copyright (c) 1997 Manuel Bouyer.
@@ -44,7 +44,7 @@
#if 0
static char sccsid[] = "@(#)main.c 8.2 (Berkeley) 1/23/94";
#else
-__RCSID("$NetBSD: main.c,v 1.7 2000/01/26 16:21:32 bouyer Exp $");
+__RCSID("$NetBSD: main.c,v 1.8 2000/01/28 16:01:46 bouyer Exp $");
#endif
#endif /* not lint */
@@ -176,6 +176,7 @@
daddr_t n_bfree;
struct dups *dp;
struct zlncnt *zlnp;
+ int i;
if (preen && child)
(void)signal(SIGQUIT, voidquit);
@@ -253,7 +254,8 @@
(n_files -= maxino - 9 - sblock.e2fs.e2fs_ficount))
printf("%d files missing\n", n_files);
if (debug) {
- n_blks += sblock.e2fs_ncg * cgoverhead;
+ for (i = 0; i < sblock.e2fs_ncg; i++)
+ n_blks += cgoverhead(i);
n_blks += sblock.e2fs.e2fs_first_dblock;
if (n_blks -= maxfsblock - n_bfree)
printf("%d blocks missing\n", n_blks);
diff -r 2adccbd8b297 -r 3cd43e66ff8f sbin/fsck_ext2fs/pass1.c
--- a/sbin/fsck_ext2fs/pass1.c Fri Jan 28 16:00:23 2000 +0000
+++ b/sbin/fsck_ext2fs/pass1.c Fri Jan 28 16:01:46 2000 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: pass1.c,v 1.7 2000/01/26 16:21:32 bouyer Exp $ */
+/* $NetBSD: pass1.c,v 1.8 2000/01/28 16:01:46 bouyer Exp $ */
/*
* Copyright (c) 1997 Manuel Bouyer.
@@ -39,7 +39,7 @@
#if 0
static char sccsid[] = "@(#)pass1.c 8.1 (Berkeley) 6/5/93";
#else
-__RCSID("$NetBSD: pass1.c,v 1.7 2000/01/26 16:21:32 bouyer Exp $");
+__RCSID("$NetBSD: pass1.c,v 1.8 2000/01/28 16:01:46 bouyer Exp $");
#endif
#endif /* not lint */
@@ -50,7 +50,6 @@
#include <ufs/ext2fs/ext2fs.h>
#include <ufs/ufs/dinode.h> /* for IFMT & friends */
-#include <ufs/ufs/dir.h> /* for IFTODT & friends */
#include <stdio.h>
#include <stdlib.h>
@@ -69,20 +68,43 @@
pass1()
{
ino_t inumber;
- int c, i, cgd;
+ int c, i;
+ daddr_t dbase;
struct inodesc idesc;
/*
* Set file system reserved blocks in used block map.
*/
for (c = 0; c < sblock.e2fs_ncg; c++) {
- i = c * sblock.e2fs.e2fs_bpg + sblock.e2fs.e2fs_first_dblock;
- cgd = i + cgoverhead;
+ dbase = c * sblock.e2fs.e2fs_bpg +
+ sblock.e2fs.e2fs_first_dblock;
+ /* Mark the blocks used for the inode table */
+ if (sblock.e2fs_gd[c].ext2bgd_i_tables >= dbase) {
+ for (i = 0; i < sblock.e2fs_itpg; i++)
+ setbmap(sblock.e2fs_gd[c].ext2bgd_i_tables + i);
+ }
+ /* Mark the blocks used for the block bitmap */
+ if (sblock.e2fs_gd[c].ext2bgd_b_bitmap >= dbase)
+ setbmap(sblock.e2fs_gd[c].ext2bgd_b_bitmap);
+ /* Mark the blocks used for the inode bitmap */
+ if (sblock.e2fs_gd[c].ext2bgd_i_bitmap >= dbase)
+ setbmap(sblock.e2fs_gd[c].ext2bgd_i_bitmap);
- if (c == 0)
- i = 0;
- for (; i < cgd; i++)
- setbmap(i);
+ if (sblock.e2fs.e2fs_rev == E2FS_REV0 ||
+ (sblock.e2fs.e2fs_features_rocompat &
+ EXT2F_ROCOMPAT_SPARSESUPER) == 0 ||
+ cg_has_sb(c)) {
+ /* Mark copuy of SB and descriptors */
+ setbmap(dbase);
+ for (i = 1; i <= sblock.e2fs_ngdb; i++)
+ setbmap(dbase+i);
Home |
Main Index |
Thread Index |
Old Index