Annotation of 43BSD/etc/fsck/pass4.c, revision 1.1.1.1

1.1       root        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: 
                      7: #ifndef lint
                      8: static char sccsid[] = "@(#)pass4.c    5.3 (Berkeley) 3/5/86";
                      9: #endif not lint
                     10: 
                     11: #include <sys/param.h>
                     12: #include <sys/inode.h>
                     13: #include <sys/fs.h>
                     14: #include "fsck.h"
                     15: 
                     16: int    pass4check();
                     17: 
                     18: pass4()
                     19: {
                     20:        register ino_t inumber;
                     21:        register struct zlncnt *zlnp;
                     22:        struct inodesc idesc;
                     23:        int n;
                     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:
                     33:                case DFOUND:
                     34:                        n = lncntp[inumber];
                     35:                        if (n)
                     36:                                adjust(&idesc, (short)n);
                     37:                        else {
                     38:                                for (zlnp = zlnhead; zlnp; zlnp = zlnp->next)
                     39:                                        if (zlnp->zlncnt == inumber) {
                     40:                                                zlnp->zlncnt = zlnhead->zlncnt;
                     41:                                                zlnp = zlnhead;
                     42:                                                zlnhead = zlnhead->next;
                     43:                                                free(zlnp);
                     44:                                                clri(&idesc, "UNREF", 1);
                     45:                                                break;
                     46:                                        }
                     47:                        }
                     48:                        break;
                     49: 
                     50:                case DSTATE:
                     51:                        clri(&idesc, "UNREF", 1);
                     52:                        break;
                     53: 
                     54:                case DCLEAR:
                     55:                case FCLEAR:
                     56:                        clri(&idesc, "BAD/DUP", 1);
                     57:                        break;
                     58: 
                     59:                case USTATE:
                     60:                        break;
                     61: 
                     62:                default:
                     63:                        errexit("BAD STATE %d FOR INODE I=%d",
                     64:                            statemap[inumber], inumber);
                     65:                }
                     66:        }
                     67: }
                     68: 
                     69: pass4check(idesc)
                     70:        register struct inodesc *idesc;
                     71: {
                     72:        register struct dups *dlp;
                     73:        int nfrags, res = KEEPON;
                     74:        daddr_t blkno = idesc->id_blkno;
                     75: 
                     76:        for (nfrags = idesc->id_numfrags; nfrags > 0; blkno++, nfrags--) {
                     77:                if (outrange(blkno, 1)) {
                     78:                        res = SKIP;
                     79:                } else if (getbmap(blkno)) {
                     80:                        for (dlp = duplist; dlp; dlp = dlp->next) {
                     81:                                if (dlp->dup != blkno)
                     82:                                        continue;
                     83:                                dlp->dup = duplist->dup;
                     84:                                dlp = duplist;
                     85:                                duplist = duplist->next;
                     86:                                free(dlp);
                     87:                                break;
                     88:                        }
                     89:                        if (dlp == 0) {
                     90:                                clrbmap(blkno);
                     91:                                n_blks--;
                     92:                        }
                     93:                }
                     94:        }
                     95:        return (res);
                     96: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.