6 /* SEF functions and variables. */
7 static void sef_local_startup(void);
8 static int sef_cb_init_fresh(int type
, sef_init_info_t
*info
);
9 static void sef_cb_signal_handler(int signo
);
11 /*===========================================================================*
13 *===========================================================================*/
14 int main(int argc
, char *argv
[])
16 /* This is the main routine of this service. */
18 /* SEF local startup. */
19 env_setargs(argc
, argv
);
22 /* The fsdriver library does the actual work here. */
23 fsdriver_task(&mfs_table
);
28 /*===========================================================================*
30 *===========================================================================*/
31 static void sef_local_startup()
33 /* Register init callbacks. */
34 sef_setcb_init_fresh(sef_cb_init_fresh
);
35 sef_setcb_init_restart(SEF_CB_INIT_RESTART_STATEFUL
);
37 /* Register signal callbacks. */
38 sef_setcb_signal_handler(sef_cb_signal_handler
);
40 /* Let SEF perform startup. */
44 /*===========================================================================*
46 *===========================================================================*/
47 static int sef_cb_init_fresh(int UNUSED(type
), sef_init_info_t
*UNUSED(info
))
49 /* Initialize the Minix file server. */
52 lmfs_may_use_vmcache(1);
54 /* Init inode table */
55 for (i
= 0; i
< NR_INODES
; ++i
) {
62 lmfs_buf_pool(DEFAULT_NR_BUFS
);
67 /*===========================================================================*
68 * sef_cb_signal_handler *
69 *===========================================================================*/
70 static void sef_cb_signal_handler(int signo
)
72 /* Only check for termination signal, ignore anything else. */
73 if (signo
!= SIGTERM
) return;
82 /*===========================================================================*
84 *===========================================================================*/
85 static void cch_check(void)
89 for (i
= 0; i
< NR_INODES
; ++i
) {
90 if (inode
[i
].i_count
!= cch
[i
] && req_nr
!= REQ_GETNODE
&&
91 req_nr
!= REQ_PUTNODE
&& req_nr
!= REQ_READSUPER
&&
92 req_nr
!= REQ_MOUNTPOINT
&& req_nr
!= REQ_UNMOUNT
&&
93 req_nr
!= REQ_SYNC
&& req_nr
!= REQ_LOOKUP
) {
94 printf("MFS(%d) inode(%lu) cc: %d req_nr: %d\n", sef_self(),
95 inode
[i
].i_num
, inode
[i
].i_count
- cch
[i
], req_nr
);
98 cch
[i
] = inode
[i
].i_count
;