|
|
Xinu for VAX
/* dumkfs.c - dumkfs, dumkdl, dumkil */
#include <conf.h>
#include <kernel.h>
#include <disk.h>
#include <lfile.h>
#include <dir.h>
/*------------------------------------------------------------------------
* dumkfs -- make a fresh file system on a disk
*------------------------------------------------------------------------
*/
dumkfs(diskdev, niblks, nblocks, diskid, verbose)
int diskdev;
int niblks;
unsigned nblocks;
int diskid;
Bool verbose;
{
DBADDR firstdb, lastdb;
struct dir *dirptr;
if (verbose)
kprintf("Clearing directory block...\n");
dirptr = dsdirec(diskdev);
firstdb = (DBADDR) (ibtodb(niblks-1) + 1);
lastdb = (DBADDR) (nblocks - 1);
dirptr->d_iblks = niblks;
dirptr->d_fblst = firstdb;
dirptr->d_filst = (IBADDR) niblks-1;
dirptr->d_id = diskid;
dirptr->d_nfiles = 0;
write(diskdev, dskbcpy(dirptr), DIRBLK);
dumkil(diskdev, niblks, verbose);
dumkdl(diskdev, firstdb, lastdb, verbose);
if (verbose)
kprintf("Done initializing disk...\n");
return(OK);
}
/*------------------------------------------------------------------------
* dumkdl -- link all data blocks into free list to init. file system
*------------------------------------------------------------------------
*/
dumkdl(diskdev, firstfb, lastfb, verbose)
int diskdev;
DBADDR firstfb, lastfb;
Bool verbose;
{
struct freeblk *buff;
DBADDR dba;
char *bptr;
int i;
if (verbose)
kprintf("Linking %u free blocks from %u through %u...\n",
lastfb - firstfb + (DBADDR)1, firstfb, lastfb);
bptr = buff = (struct freeblk *) getbuf(dskdbp);
for (i=0 ; i<DBUFSIZ ; i++)
*bptr++ = '\000';
for (dba=firstfb ; dba < lastfb ; dba++) {
buff->fbnext = (DBADDR) (dba+1);
write(diskdev, dskbcpy(buff), dba);
if (verbose && (dba%500 == 0))
kprintf("%5u\r",dba);
}
buff->fbnext = (DBADDR) DIRBLK;
write(diskdev, buff, dba);
if (verbose)
kprintf("\nDone linking data blocks...\n");
return(OK);
}
/*------------------------------------------------------------------------
* dumkil -- link ALL i-blocks onto a free list
*------------------------------------------------------------------------
*/
dumkil(diskdev, niblks, verbose)
int diskdev;
int niblks;
Bool verbose;
{
struct iblk iblock;
IBADDR ibnum;
int i;
if (verbose)
kprintf("Linking %d i-blocks together...\n", niblks);
ibclear(&iblock, 0L);
for (ibnum=niblks-1 ; ibnum>0 ; ibnum--) {
iblock.ib_next = ibnum-1;
ibput(diskdev, ibnum, &iblock);
}
iblock.ib_next = IBNULL;
ibput(diskdev, 0, &iblock);
if (verbose)
kprintf("Done linking i-blocks...\n");
return(OK);
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.