XINU
device
lfs
lfiballoc.c
Go to the documentation of this file.
1
/* lfiballoc.c - lfiballoc */
2
3
#include <
xinu.h
>
4
5
/*------------------------------------------------------------------------
6
* lfiballoc - Allocate a new index block from free list on disk
7
* (assumes directory mutex held)
8
*------------------------------------------------------------------------
9
*/
10
ibid32
lfiballoc
(
void
)
11
{
12
ibid32
ibnum;
/* ID of next block on the free list */
13
struct
lfiblk
iblock;
/* Buffer to hold an index block */
14
15
/* Get ID of first index block on free list */
16
17
ibnum =
Lf_data
.
lf_dir
.
lfd_ifree
;
18
if
(ibnum ==
LF_INULL
) {
/* Ran out of free index blocks */
19
panic
(
"out of index blocks"
);
20
}
21
lfibget
(
Lf_data
.
lf_dskdev
, ibnum, &iblock);
22
23
/* Unlink index block from the directory free list */
24
25
Lf_data
.
lf_dir
.
lfd_ifree
= iblock.
ib_next
;
26
27
/* Write a copy of the directory to disk after the change */
28
29
write
(
Lf_data
.
lf_dskdev
, (
char
*) &
Lf_data
.
lf_dir
,
LF_AREA_DIR
);
30
Lf_data
.
lf_dirdirty
=
FALSE
;
31
32
return
ibnum;
33
}
ibid32
int32 ibid32
ブロックIDのインデックス(ファイルシステムで使用する)
Definition:
kernel.h:40
xinu.h
全てのシステムヘッダファイルをインクルードする。
Lf_data
struct lfdata Lf_data
Definition:
lfsinit.c:5
lfdir::lfd_ifree
ibid32 lfd_ifree
Definition:
lfilesys.h:121
lfdata::lf_dskdev
did32 lf_dskdev
Definition:
lfilesys.h:131
lfibget
void lfibget(did32, ibid32, struct lfiblk *)
Definition:
lfibget.c:10
LF_INULL
#define LF_INULL
Definition:
lfilesys.h:55
LF_AREA_DIR
#define LF_AREA_DIR
Definition:
lfilesys.h:67
lfiblk
Definition:
lfilesys.h:71
write
syscall write(did32, char *, uint32)
Definition:
write.c:9
lfdata::lf_dir
struct lfdir lf_dir
Definition:
lfilesys.h:134
FALSE
#define FALSE
Boolean False(0)
Definition:
kernel.h:63
lfiblk::ib_next
ibid32 ib_next
Definition:
lfilesys.h:72
lfdata::lf_dirdirty
bool8 lf_dirdirty
Definition:
lfilesys.h:137
panic
void panic(char *)
Panic状態に陥った旨のメッセージを表示し、全てのプロセスを停止させる。
Definition:
panic.c:12
lfiballoc
ibid32 lfiballoc(void)
Definition:
lfiballoc.c:10
Generated by
1.8.13