|
|
1.1 root 1: /* iblfree.c - iblfree */
2:
3: #include <conf.h>
4: #include <kernel.h>
5: #include <io.h>
6: #include <disk.h>
7: #include <lfile.h>
8: #include <dir.h>
9:
10: /*------------------------------------------------------------------------
11: * iblfree -- free a list of iblocks given the number of the first
12: *------------------------------------------------------------------------
13: */
14: iblfree(diskdev, iblist)
15: int diskdev;
16: IBADDR iblist;
17: {
18: IBADDR ilast;
19: struct iblk iblock;
20: struct dir *dirptr;
21: int sem;
22: DBADDR dba;
23: int j;
24:
25: if (iblist == IBNULL)
26: return(OK);
27: dirptr = dsdirec(diskdev);
28: ibget(diskdev, iblist, &iblock);
29: for (ilast=iblist ; iblock.ib_next!=IBNULL ;) {
30: for (j=0 ; j<IBLEN ; j++)
31: if ( (dba=iblock.ib_dba[j]) != DBNULL)
32: lfsdfree(diskdev, dba);
33: ilast = iblock.ib_next;
34: ibget(diskdev, ilast, &iblock);
35: }
36: for (j=0 ; j<IBLEN ; j++)
37: if ( (dba=iblock.ib_dba[j]) != DBNULL)
38: lfsdfree(diskdev, dba);
39: sem = ( (struct dsblk *)devtab[diskdev].dvioblk)->dflsem;
40: wait(sem);
41: iblock.ib_next = dirptr->d_filst;
42: dirptr->d_filst = iblist;
43: ibput(diskdev, ilast, &iblock);
44: write(diskdev, dskbcpy(dirptr), DIRBLK);
45: signal(sem);
46: return(OK);
47: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.