attach bad blocks marked by badsect
SCCS-vsn: sbin/fsck/main.c 2.21
-char version[] = "@(#)main.c 2.20 (Berkeley) %G%";
+char version[] = "@(#)main.c 2.21 (Berkeley) %G%";
#include <stdio.h>
#include <ctype.h>
#include <stdio.h>
#include <ctype.h>
#define BLK ((dp->di_mode & IFMT) == IFBLK)
#define CHR ((dp->di_mode & IFMT) == IFCHR)
#define LNK ((dp->di_mode & IFMT) == IFLNK)
#define BLK ((dp->di_mode & IFMT) == IFBLK)
#define CHR ((dp->di_mode & IFMT) == IFCHR)
#define LNK ((dp->di_mode & IFMT) == IFLNK)
+#define SOCK ((dp->di_mode & IFMT) == IFSOCK)
+#define BADBLK ((dp->di_mode & IFMT) == IFMT)
#define SPECIAL (BLK || CHR)
ino_t startinum; /* blk num of first in raw area */
#define SPECIAL (BLK || CHR)
ino_t startinum; /* blk num of first in raw area */
+ if (!preen && BADBLK &&
+ reply("HOLD BAD BLOCK") == 1) {
+ dp->di_size = sblock.fs_fsize;
+ dp->di_mode = IFREG|0600;
+ inodirty();
+ } else if (ftypeok(dp) == 0)
goto unknown;
if (dp->di_size < 0) {
if (debug)
goto unknown;
if (dp->di_size < 0) {
if (debug)
for (j = ndb; j < NDADDR; j++)
if (dp->di_db[j] != 0) {
if (debug)
for (j = ndb; j < NDADDR; j++)
if (dp->di_db[j] != 0) {
if (debug)
- printf("bad direct addr:");
+ printf("bad direct addr: %d\n",
+ dp->di_db[j]);
goto unknown;
}
for (j = 0, ndb -= NDADDR; ndb > 0; j++)
goto unknown;
}
for (j = 0, ndb -= NDADDR; ndb > 0; j++)
for (; j < NIADDR; j++)
if (dp->di_ib[j] != 0) {
if (debug)
for (; j < NIADDR; j++)
if (dp->di_ib[j] != 0) {
if (debug)
- printf("bad indirect addr:");
+ printf("bad indirect addr: %d\n",
+ dp->di_ib[j]);
goto unknown;
}
n_files++;
goto unknown;
}
n_files++;
ckinode(dp, ADDR);
continue;
unknown:
ckinode(dp, ADDR);
continue;
unknown:
- pfatal("UNKNOWN FILE TYPE I=%u", inum);
- if (reply("CLEAR") == 1) {
+ if (!SOCK)
+ pfatal("UNKNOWN FILE TYPE I=%u", inum);
+ if ((preen && SOCK) || reply("CLEAR") == 1) {
zapino(dp);
inodirty();
inosumbad++;
zapino(dp);
inodirty();
inosumbad++;
/*
* An inconsistency occured which shouldn't during normal operations.
/*
* An inconsistency occured which shouldn't during normal operations.
- * Die if preening, otw just printf.
+ * Die if preening, otherwise just printf.
*/
/* VARARGS1 */
pfatal(s, a1, a2, a3)
*/
/* VARARGS1 */
pfatal(s, a1, a2, a3)