|
|
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.