File:  [XINU] / xinu / sys / LSI / ibnew.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Tue Apr 24 17:39:04 2018 UTC (8 years, 3 months ago) by root
Branches: xinu, MAIN
CVS tags: xinu-19870308, HEAD
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);
}

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.