Commit | Line | Data |
---|---|---|
76797561 | 1 | /* |
fe32782c KM |
2 | * Copyright (c) 1980, 1986 The Regents of the University of California. |
3 | * All rights reserved. | |
4 | * | |
70ab3c27 | 5 | * %sccs.include.redist.c% |
76797561 DF |
6 | */ |
7 | ||
7fa08060 | 8 | #ifndef lint |
b82067db | 9 | static char sccsid[] = "@(#)pass1b.c 5.10 (Berkeley) %G%"; |
fe32782c | 10 | #endif /* not lint */ |
7fa08060 KM |
11 | |
12 | #include <sys/param.h> | |
b82067db | 13 | #include <sys/time.h> |
558b3a30 KB |
14 | #include <ufs/ufs/dinode.h> |
15 | #include <ufs/ffs/fs.h> | |
d72e970b | 16 | #include <string.h> |
7fa08060 KM |
17 | #include "fsck.h" |
18 | ||
19 | int pass1bcheck(); | |
62e6c152 | 20 | static struct dups *duphead; |
7fa08060 KM |
21 | |
22 | pass1b() | |
23 | { | |
24 | register int c, i; | |
569ec282 | 25 | register struct dinode *dp; |
7fa08060 KM |
26 | struct inodesc idesc; |
27 | ino_t inumber; | |
28 | ||
29 | bzero((char *)&idesc, sizeof(struct inodesc)); | |
30 | idesc.id_type = ADDR; | |
31 | idesc.id_func = pass1bcheck; | |
62e6c152 | 32 | duphead = duplist; |
7fa08060 KM |
33 | inumber = 0; |
34 | for (c = 0; c < sblock.fs_ncg; c++) { | |
35 | for (i = 0; i < sblock.fs_ipg; i++, inumber++) { | |
a50c3bff KM |
36 | if (inumber < ROOTINO) |
37 | continue; | |
7fa08060 KM |
38 | dp = ginode(inumber); |
39 | if (dp == NULL) | |
40 | continue; | |
41 | idesc.id_number = inumber; | |
42 | if (statemap[inumber] != USTATE && | |
43 | (ckinode(dp, &idesc) & STOP)) | |
569ec282 | 44 | return; |
7fa08060 KM |
45 | } |
46 | } | |
7fa08060 KM |
47 | } |
48 | ||
49 | pass1bcheck(idesc) | |
50 | register struct inodesc *idesc; | |
51 | { | |
62e6c152 | 52 | register struct dups *dlp; |
7fa08060 KM |
53 | int nfrags, res = KEEPON; |
54 | daddr_t blkno = idesc->id_blkno; | |
55 | ||
56 | for (nfrags = idesc->id_numfrags; nfrags > 0; blkno++, nfrags--) { | |
569ec282 | 57 | if (chkrange(blkno, 1)) |
7fa08060 | 58 | res = SKIP; |
62e6c152 KM |
59 | for (dlp = duphead; dlp; dlp = dlp->next) { |
60 | if (dlp->dup == blkno) { | |
569ec282 | 61 | blkerror(idesc->id_number, "DUP", blkno); |
62e6c152 KM |
62 | dlp->dup = duphead->dup; |
63 | duphead->dup = blkno; | |
64 | duphead = duphead->next; | |
7fa08060 | 65 | } |
62e6c152 KM |
66 | if (dlp == muldup) |
67 | break; | |
68 | } | |
69 | if (muldup == 0 || duphead == muldup->next) | |
70 | return (STOP); | |
7fa08060 KM |
71 | } |
72 | return (res); | |
73 | } |