116263Smckusick #ifndef lint 2*21744Smckusick static char version[] = "@(#)pass1b.c 3.3 (Berkeley) 05/31/85"; 316263Smckusick #endif 416263Smckusick 516263Smckusick #include <sys/param.h> 616263Smckusick #include <sys/inode.h> 716263Smckusick #include <sys/fs.h> 816263Smckusick #include "fsck.h" 916263Smckusick 1016263Smckusick int pass1bcheck(); 11*21744Smckusick static struct dups *duphead; 1216263Smckusick 1316263Smckusick pass1b() 1416263Smckusick { 1516263Smckusick register int c, i; 1616263Smckusick register DINODE *dp; 1716263Smckusick struct inodesc idesc; 1816263Smckusick ino_t inumber; 1916263Smckusick 2016263Smckusick bzero((char *)&idesc, sizeof(struct inodesc)); 2116263Smckusick idesc.id_type = ADDR; 2216263Smckusick idesc.id_func = pass1bcheck; 23*21744Smckusick duphead = duplist; 2416263Smckusick inumber = 0; 2516263Smckusick for (c = 0; c < sblock.fs_ncg; c++) { 2616263Smckusick for (i = 0; i < sblock.fs_ipg; i++, inumber++) { 2720847Smckusick if (inumber < ROOTINO) 2820847Smckusick continue; 2916263Smckusick dp = ginode(inumber); 3016263Smckusick if (dp == NULL) 3116263Smckusick continue; 3216263Smckusick idesc.id_number = inumber; 3316263Smckusick if (statemap[inumber] != USTATE && 3416263Smckusick (ckinode(dp, &idesc) & STOP)) 3516263Smckusick goto out1b; 3616263Smckusick } 3716263Smckusick } 3816263Smckusick out1b: 3916263Smckusick flush(&dfile, &inoblk); 4016263Smckusick } 4116263Smckusick 4216263Smckusick pass1bcheck(idesc) 4316263Smckusick register struct inodesc *idesc; 4416263Smckusick { 45*21744Smckusick register struct dups *dlp; 4616263Smckusick int nfrags, res = KEEPON; 4716263Smckusick daddr_t blkno = idesc->id_blkno; 4816263Smckusick 4916263Smckusick for (nfrags = idesc->id_numfrags; nfrags > 0; blkno++, nfrags--) { 5016263Smckusick if (outrange(blkno, 1)) 5116263Smckusick res = SKIP; 52*21744Smckusick for (dlp = duphead; dlp; dlp = dlp->next) { 53*21744Smckusick if (dlp->dup == blkno) { 5416263Smckusick blkerr(idesc->id_number, "DUP", blkno); 55*21744Smckusick dlp->dup = duphead->dup; 56*21744Smckusick duphead->dup = blkno; 57*21744Smckusick duphead = duphead->next; 5816263Smckusick } 59*21744Smckusick if (dlp == muldup) 60*21744Smckusick break; 61*21744Smckusick } 62*21744Smckusick if (muldup == 0 || duphead == muldup->next) 63*21744Smckusick return (STOP); 6416263Smckusick } 6516263Smckusick return (res); 6616263Smckusick } 67