XINU
lfdballoc.c
Go to the documentation of this file.
1 
8 /* lfdballoc.c - lfdballoc */
9 
10 #include <xinu.h>
11 
12 #define DFILL '+' /* character used to fill a disk block */
13 
14 /*------------------------------------------------------------------------
15  * lfdballoc - Allocate a new data block from free list on disk
16  * (assumes directory mutex held)
17  *------------------------------------------------------------------------
18  */
20  struct lfdbfree *dbuff /* Addr. of buffer to hold data block */
21 )
22 {
23  dbid32 dnum; /* ID of next d-block on the free list */
24  int32 retval; /* Return value */
25 
26  /* Get the ID of first data block on the free list */
27 
28  dnum = Lf_data.lf_dir.lfd_dfree;
29  if (dnum == LF_DNULL)
30  { /* Ran out of free data blocks */
31  panic("out of data blocks");
32  }
33  retval = read(Lf_data.lf_dskdev, (char *)dbuff, dnum);
34  if (retval == SYSERR)
35  {
36  panic("lfdballoc cannot read disk block\n\r");
37  }
38 
39  /* Unlink d-block from in-memory directory */
40 
41  Lf_data.lf_dir.lfd_dfree = dbuff->lf_nextdb;
44 
45  /* Fill data block to erase old data */
46 
47  memset((char *)dbuff, DFILL, LF_BLKSIZ);
48  return dnum;
49 }
int32 dbid32
データブロックID(ファイルシステムで使用する)
Definition: kernel.h:42
全てのシステムヘッダファイルをインクルードする。
#define SYSERR
処理が失敗した場合
Definition: kernel.h:79
struct lfdata Lf_data
Definition: lfsinit.c:5
syscall read(did32, char *, uint32)
Definition: read.c:9
did32 lf_dskdev
Definition: lfilesys.h:131
#define LF_AREA_DIR
Definition: lfilesys.h:67
dbid32 lfd_dfree
Definition: lfilesys.h:120
syscall write(did32, char *, uint32)
Definition: write.c:9
#define LF_BLKSIZ
Definition: lfilesys.h:48
struct lfdir lf_dir
Definition: lfilesys.h:134
#define FALSE
Boolean False(0)
Definition: kernel.h:63
bool8 lf_dirdirty
Definition: lfilesys.h:137
int int32
符号あり32ビット整数(int)
Definition: kernel.h:11
#define LF_DNULL
Definition: lfilesys.h:56
void * memset(void *, const int, int32)
指定のByteブロックに対して、同じ値をNバイト分書き込む。
Definition: memset.c:13
void panic(char *)
Panic状態に陥った旨のメッセージを表示し、全てのプロセスを停止させる。
Definition: panic.c:12
dbid32 lfdballoc(struct lfdbfree *dbuff)
Definition: lfdballoc.c:19
#define DFILL
Definition: lfdballoc.c:12