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