|
|
1.1 ! root 1: /* lfsnewd.c - lfsnewd */ ! 2: ! 3: #include <conf.h> ! 4: #include <kernel.h> ! 5: #include <disk.h> ! 6: #include <lfile.h> ! 7: #include <dir.h> ! 8: ! 9: #define DFILLER '+' ! 10: ! 11: /*------------------------------------------------------------------------ ! 12: * lfsnewd -- allocate a new data block from free list on disk ! 13: *------------------------------------------------------------------------ ! 14: */ ! 15: lfsnewd(diskdev, flptr) ! 16: int diskdev; ! 17: struct flblk *flptr; ! 18: { ! 19: struct iblock *ibptr; ! 20: struct dir *dirptr; ! 21: struct freeblk *fbptr; ! 22: char *buf; ! 23: int sem; ! 24: DBADDR dba; ! 25: int i; ! 26: ! 27: dirptr = dsdirec(diskdev); ! 28: fbptr = (struct freeblk *) (buf = flptr->fl_buff); ! 29: sem = ((struct dsblk *)devtab[diskdev].dvioblk)->dflsem; ! 30: wait(sem); ! 31: dba = dirptr->d_fblst; ! 32: read(diskdev, fbptr, dba); ! 33: dirptr->d_fblst = fbptr->fbnext; ! 34: write(diskdev, dskbcpy(dirptr), DIRBLK); ! 35: signal(sem); ! 36: for (i=0 ; i<DBUFSIZ ; i++) ! 37: *buf++ = DFILLER; ! 38: write(diskdev, dskbcpy(fbptr), dba); ! 39: return(dba); ! 40: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.