|
|
1.1 root 1: /* lfsdfree.c - lfsdfree */
2:
3: #include <conf.h>
4: #include <kernel.h>
5: #include <disk.h>
6: #include <lfile.h>
7: #include <dir.h>
8:
9: /*------------------------------------------------------------------------
10: * lfsdfree -- free a data block given its address
11: *------------------------------------------------------------------------
12: */
13: lfsdfree(diskdev, dba)
14: int diskdev;
15: DBADDR dba;
16: {
17: struct dir *dirptr;
18: int dirsem;
19: struct freeblk *buf;
20:
21: dirptr = dsdirec(diskdev);
22: dirsem = devtab[diskdev].dvioblk->dflsem;
23: buf = (struct freeblk *)getbuf(dskdbp);
24: wait(dirsem);
25: buf->fbnext = dirptr->d_fblst;
26: dirptr->d_fblst = dba;
27: write(diskdev, buf, dba);
28: write(diskdev, dskbcpy(dirptr), DIRBLK);
29: signal(dirsem);
30: return(OK);
31: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.