|
|
Xinu for VAX
/* ibnew.c - ibnew */
#include <conf.h>
#include <kernel.h>
#include <io.h>
#include <disk.h>
#include <lfile.h>
#include <dir.h>
/*------------------------------------------------------------------------
* ibnew -- allocate a new iblock from free list on disk
*------------------------------------------------------------------------
*/
ibnew(diskdev, writedir)
int diskdev;
Bool writedir;
{
struct dir *dirptr;
struct iblk iblock;
IBADDR inum;
int i;
int sem;
sem = ((struct dsblk *)devtab[diskdev].dvioblk)->dflsem;
dirptr = dsdirec(diskdev);
wait(sem);
inum = dirptr->d_filst;
ibget(diskdev, inum, &iblock);
dirptr->d_filst = iblock.ib_next;
if (writedir)
write(diskdev, dskbcpy(dirptr), DIRBLK);
signal(sem);
ibclear(&iblock, 0L);
ibput(diskdev, inum, &iblock);
return(inum);
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.