1 #ifndef lint 2 static char version[] = "@(#)pass1b.c 3.1 (Berkeley) 03/31/84"; 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 } 59