This version Aug 16th -- source directory moved to /usr/src/etc/XNSrouted;
[unix-history] / usr / src / sbin / fsck / pass4.c
CommitLineData
76797561
DF
1/*
2 * Copyright (c) 1980 Regents of the University of California.
3 * All rights reserved. The Berkeley software License Agreement
4 * specifies the terms and conditions for redistribution.
5 */
6
577b7874 7#ifndef lint
76797561
DF
8static char sccsid[] = "@(#)pass4.c 5.1 (Berkeley) %G%";
9#endif not lint
577b7874
KM
10
11#include <sys/param.h>
12#include <sys/inode.h>
13#include <sys/fs.h>
14#include "fsck.h"
15
16int pass4check();
17
18pass4()
19{
82dc9a9e
KM
20 register ino_t inumber;
21 register struct zlncnt *zlnp;
577b7874 22 struct inodesc idesc;
82dc9a9e 23 int n;
577b7874
KM
24
25 bzero((char *)&idesc, sizeof(struct inodesc));
26 idesc.id_type = ADDR;
27 idesc.id_func = pass4check;
28 for (inumber = ROOTINO; inumber <= lastino; inumber++) {
29 idesc.id_number = inumber;
30 switch (statemap[inumber]) {
31
32 case FSTATE:
993a756c 33 case DFOUND:
577b7874
KM
34 n = lncntp[inumber];
35 if (n)
36 adjust(&idesc, (short)n);
37 else {
82dc9a9e
KM
38 for (zlnp = zlnhead; zlnp; zlnp = zlnp->next)
39 if (zlnp->zlncnt == inumber) {
577b7874
KM
40 clri(&idesc, "UNREF", 1);
41 break;
42 }
43 }
44 break;
45
46 case DSTATE:
47 clri(&idesc, "UNREF", 1);
48 break;
49
993a756c
KM
50 case DCLEAR:
51 case FCLEAR:
577b7874
KM
52 clri(&idesc, "BAD/DUP", 1);
53 break;
54 }
55 }
577b7874
KM
56}
57
58pass4check(idesc)
59 register struct inodesc *idesc;
60{
62e6c152 61 register struct dups *dlp;
577b7874
KM
62 int nfrags, res = KEEPON;
63 daddr_t blkno = idesc->id_blkno;
64
65 for (nfrags = idesc->id_numfrags; nfrags > 0; blkno++, nfrags--) {
62e6c152 66 if (outrange(blkno, 1)) {
577b7874 67 res = SKIP;
62e6c152
KM
68 } else if (getbmap(blkno)) {
69 for (dlp = duplist; dlp; dlp = dlp->next) {
70 if (dlp->dup != blkno)
71 continue;
72 dlp->dup = duplist->dup;
73 dlp = duplist;
74 duplist = duplist->next;
82dc9a9e 75 /* free(dlp); */
62e6c152
KM
76 break;
77 }
78 if (dlp == 0) {
79 clrbmap(blkno);
80 n_blks--;
81 }
577b7874
KM
82 }
83 }
84 return (res);
85}