1 #ifndef lint 2 static char version[] = "@(#)pass1b.c 3.2 (Berkeley) 05/16/85"; 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 if (inumber < ROOTINO) 26 continue; 27 dp = ginode(inumber); 28 if (dp == NULL) 29 continue; 30 idesc.id_number = inumber; 31 if (statemap[inumber] != USTATE && 32 (ckinode(dp, &idesc) & STOP)) 33 goto out1b; 34 } 35 } 36 out1b: 37 flush(&dfile, &inoblk); 38 } 39 40 pass1bcheck(idesc) 41 register struct inodesc *idesc; 42 { 43 register daddr_t *dlp; 44 int nfrags, res = KEEPON; 45 daddr_t blkno = idesc->id_blkno; 46 47 for (nfrags = idesc->id_numfrags; nfrags > 0; blkno++, nfrags--) { 48 if (outrange(blkno, 1)) 49 res = SKIP; 50 for (dlp = duplist; dlp < muldup; dlp++) 51 if (*dlp == blkno) { 52 blkerr(idesc->id_number, "DUP", blkno); 53 *dlp = *--muldup; 54 *muldup = blkno; 55 if (muldup == duplist) 56 return (STOP); 57 } 58 } 59 return (res); 60 } 61