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