|
|
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.