|
|
1.1 root 1: /* ibnew.c - ibnew */
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: * ibnew -- allocate a new iblock from free list on disk
12: *------------------------------------------------------------------------
13: */
14: ibnew(diskdev, writedir)
15: int diskdev;
16: Bool writedir;
17: {
18: struct dir *dirptr;
19: struct iblk iblock;
20: IBADDR inum;
21: int i;
22: int sem;
23:
24: sem = ((struct dsblk *)devtab[diskdev].dvioblk)->dflsem;
25: dirptr = dsdirec(diskdev);
26: wait(sem);
27: inum = dirptr->d_filst;
28: ibget(diskdev, inum, &iblock);
29: dirptr->d_filst = iblock.ib_next;
30: if (writedir)
31: write(diskdev, dskbcpy(dirptr), DIRBLK);
32: signal(sem);
33: ibclear(&iblock, 0L);
34: ibput(diskdev, inum, &iblock);
35: return(inum);
36: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.