Commit | Line | Data |
---|---|---|
7fa08060 KM |
1 | #ifndef lint |
2 | static char version[] = "@(#)pass1b.c 3.1 (Berkeley) %G%"; | |
3 | #endif | |
4 | ||
5 | #include <sys/param.h> | |
6 | #include <sys/inode.h> | |
7 | #include <sys/fs.h> | |
8 | #include "fsck.h" | |
9 | ||
10 | int pass1bcheck(); | |
11 | ||
12 | pass1b() | |
13 | { | |
14 | register int c, i; | |
15 | register DINODE *dp; | |
16 | struct inodesc idesc; | |
17 | ino_t inumber; | |
18 | ||
19 | bzero((char *)&idesc, sizeof(struct inodesc)); | |
20 | idesc.id_type = ADDR; | |
21 | idesc.id_func = pass1bcheck; | |
22 | inumber = 0; | |
23 | for (c = 0; c < sblock.fs_ncg; c++) { | |
24 | for (i = 0; i < sblock.fs_ipg; i++, inumber++) { | |
25 | dp = ginode(inumber); | |
26 | if (dp == NULL) | |
27 | continue; | |
28 | idesc.id_number = inumber; | |
29 | if (statemap[inumber] != USTATE && | |
30 | (ckinode(dp, &idesc) & STOP)) | |
31 | goto out1b; | |
32 | } | |
33 | } | |
34 | out1b: | |
35 | flush(&dfile, &inoblk); | |
36 | } | |
37 | ||
38 | pass1bcheck(idesc) | |
39 | register struct inodesc *idesc; | |
40 | { | |
41 | register daddr_t *dlp; | |
42 | int nfrags, res = KEEPON; | |
43 | daddr_t blkno = idesc->id_blkno; | |
44 | ||
45 | for (nfrags = idesc->id_numfrags; nfrags > 0; blkno++, nfrags--) { | |
46 | if (outrange(blkno, 1)) | |
47 | res = SKIP; | |
48 | for (dlp = duplist; dlp < muldup; dlp++) | |
49 | if (*dlp == blkno) { | |
50 | blkerr(idesc->id_number, "DUP", blkno); | |
51 | *dlp = *--muldup; | |
52 | *muldup = blkno; | |
53 | if (muldup == duplist) | |
54 | return (STOP); | |
55 | } | |
56 | } | |
57 | return (res); | |
58 | } |