XINU
device
rds
rdsclose.c
Go to the documentation of this file.
1
/* rdsclose.c - rdsclose */
2
3
#include <
xinu.h
>
4
5
/*------------------------------------------------------------------------
6
* rdsclose - Close a remote disk device
7
*------------------------------------------------------------------------
8
*/
9
devcall
rdsclose
(
10
struct
dentry
*devptr
/* Entry in device switch table */
11
)
12
{
13
struct
rdscblk
*rdptr;
/* Ptr to control block entry */
14
struct
rdbuff
*bptr;
/* Ptr to buffer on a list */
15
struct
rdbuff
*nptr;
/* Ptr to next buff on the list */
16
int32
nmoved;
/* Number of buffers moved */
17
18
/* Device must be open */
19
20
rdptr = &
rdstab
[devptr->
dvminor
];
21
if
(rdptr->
rd_state
!=
RD_OPEN
) {
22
return
SYSERR
;
23
}
24
25
/* Request queue must be empty */
26
27
if
(rdptr->
rd_rhnext
!= (
struct
rdbuff
*)&rdptr->
rd_rtnext
) {
28
return
SYSERR
;
29
}
30
31
/* Move all buffers from the cache to the free list */
32
33
bptr = rdptr->
rd_chnext
;
34
nmoved = 0;
35
while
(bptr != (
struct
rdbuff
*)&rdptr->
rd_ctnext
) {
36
nmoved++;
37
38
/* Unlink buffer from cache */
39
40
nptr = bptr->
rd_next
;
41
(bptr->
rd_prev
)->
rd_next
= nptr;
42
nptr->
rd_prev
= bptr->
rd_prev
;
43
44
/* Insert buffer into free list */
45
46
bptr->
rd_next
= rdptr->
rd_free
;
47
48
rdptr->
rd_free
= bptr;
49
bptr->
rd_status
=
RD_INVALID
;
50
51
/* Move to next buffer in the cache */
52
53
bptr = nptr;
54
}
55
56
/* Set the state to indicate the device is closed */
57
58
rdptr->
rd_state
=
RD_FREE
;
59
return
OK
;
60
}
RD_OPEN
#define RD_OPEN
Definition:
rdisksys.h:37
RD_FREE
#define RD_FREE
Definition:
rdisksys.h:36
dentry::dvminor
int32 dvminor
Definition:
conf.h:8
xinu.h
全てのシステムヘッダファイルをインクルードする。
SYSERR
#define SYSERR
処理が失敗した場合
Definition:
kernel.h:79
rdscblk::rd_rtnext
struct rdbuff * rd_rtnext
Definition:
rdisksys.h:75
rdbuff::rd_status
int32 rd_status
Definition:
rdisksys.h:62
OK
#define OK
処理が成功した場合
Definition:
kernel.h:77
rdsclose
devcall rdsclose(struct dentry *devptr)
Definition:
rdsclose.c:9
rdbuff
Definition:
rdisksys.h:55
dentry
Definition:
conf.h:6
rdscblk::rd_free
struct rdbuff * rd_free
Definition:
rdisksys.h:87
rdbuff::rd_prev
struct rdbuff * rd_prev
Definition:
rdisksys.h:57
rdscblk::rd_rhnext
struct rdbuff * rd_rhnext
Definition:
rdisksys.h:73
rdstab
struct rdscblk rdstab[]
Definition:
rdsinit.c:11
int32
int int32
符号あり32ビット整数(int)
Definition:
kernel.h:11
rdscblk
Definition:
rdisksys.h:68
rdbuff::rd_next
struct rdbuff * rd_next
Definition:
rdisksys.h:56
rdscblk::rd_ctnext
struct rdbuff * rd_ctnext
Definition:
rdisksys.h:82
rdscblk::rd_chnext
struct rdbuff * rd_chnext
Definition:
rdisksys.h:80
rdscblk::rd_state
int32 rd_state
Definition:
rdisksys.h:69
devcall
int32 devcall
デバイスコール関数 返り値の型
Definition:
kernel.h:49
RD_INVALID
#define RD_INVALID
Definition:
rdisksys.h:49
Generated by
1.8.13