|
|
1.1 ! root 1: /* dumkfs.c - dumkfs, dumkdl, dumkil */ ! 2: ! 3: #include <conf.h> ! 4: #include <kernel.h> ! 5: #include <disk.h> ! 6: #include <lfile.h> ! 7: #include <dir.h> ! 8: ! 9: /*------------------------------------------------------------------------ ! 10: * dumkfs -- make a fresh file system on a disk ! 11: *------------------------------------------------------------------------ ! 12: */ ! 13: dumkfs(diskdev, niblks, nblocks, diskid, verbose) ! 14: int diskdev; ! 15: int niblks; ! 16: unsigned nblocks; ! 17: int diskid; ! 18: Bool verbose; ! 19: { ! 20: DBADDR firstdb, lastdb; ! 21: struct dir *dirptr; ! 22: ! 23: if (verbose) ! 24: kprintf("Clearing directory block...\n"); ! 25: dirptr = dsdirec(diskdev); ! 26: firstdb = (DBADDR) (ibtodb(niblks-1) + 1); ! 27: lastdb = (DBADDR) (nblocks - 1); ! 28: dirptr->d_iblks = niblks; ! 29: dirptr->d_fblst = firstdb; ! 30: dirptr->d_filst = (IBADDR) niblks-1; ! 31: dirptr->d_id = diskid; ! 32: dirptr->d_nfiles = 0; ! 33: write(diskdev, dskbcpy(dirptr), DIRBLK); ! 34: dumkil(diskdev, niblks, verbose); ! 35: dumkdl(diskdev, firstdb, lastdb, verbose); ! 36: if (verbose) ! 37: kprintf("Done initializing disk...\n"); ! 38: return(OK); ! 39: } ! 40: ! 41: ! 42: /*------------------------------------------------------------------------ ! 43: * dumkdl -- link all data blocks into free list to init. file system ! 44: *------------------------------------------------------------------------ ! 45: */ ! 46: dumkdl(diskdev, firstfb, lastfb, verbose) ! 47: int diskdev; ! 48: DBADDR firstfb, lastfb; ! 49: Bool verbose; ! 50: { ! 51: struct freeblk *buff; ! 52: DBADDR dba; ! 53: char *bptr; ! 54: int i; ! 55: ! 56: if (verbose) ! 57: kprintf("Linking %u free blocks from %u through %u...\n", ! 58: lastfb - firstfb + (DBADDR)1, firstfb, lastfb); ! 59: bptr = buff = (struct freeblk *) getbuf(dskdbp); ! 60: for (i=0 ; i<DBUFSIZ ; i++) ! 61: *bptr++ = '\000'; ! 62: for (dba=firstfb ; dba < lastfb ; dba++) { ! 63: buff->fbnext = (DBADDR) (dba+1); ! 64: write(diskdev, dskbcpy(buff), dba); ! 65: if (verbose && (dba%500 == 0)) ! 66: kprintf("%5u\r",dba); ! 67: } ! 68: buff->fbnext = (DBADDR) DIRBLK; ! 69: write(diskdev, buff, dba); ! 70: if (verbose) ! 71: kprintf("\nDone linking data blocks...\n"); ! 72: return(OK); ! 73: } ! 74: ! 75: ! 76: ! 77: /*------------------------------------------------------------------------ ! 78: * dumkil -- link ALL i-blocks onto a free list ! 79: *------------------------------------------------------------------------ ! 80: */ ! 81: dumkil(diskdev, niblks, verbose) ! 82: int diskdev; ! 83: int niblks; ! 84: Bool verbose; ! 85: { ! 86: struct iblk iblock; ! 87: IBADDR ibnum; ! 88: int i; ! 89: ! 90: if (verbose) ! 91: kprintf("Linking %d i-blocks together...\n", niblks); ! 92: ibclear(&iblock, 0L); ! 93: for (ibnum=niblks-1 ; ibnum>0 ; ibnum--) { ! 94: iblock.ib_next = ibnum-1; ! 95: ibput(diskdev, ibnum, &iblock); ! 96: } ! 97: iblock.ib_next = IBNULL; ! 98: ibput(diskdev, 0, &iblock); ! 99: if (verbose) ! 100: kprintf("Done linking i-blocks...\n"); ! 101: return(OK); ! 102: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.