diff options
author | Frans Kaashoek <[email protected]> | 2011-07-27 20:35:46 -0400 |
---|---|---|
committer | Frans Kaashoek <[email protected]> | 2011-07-27 20:35:46 -0400 |
commit | 13a96baefc0ff5d8262c4bc8c797bee4b157443c (patch) | |
tree | a84aa8ed35618f99c3d7e8cdd466d22ae7bad597 /syscall.c | |
parent | 97657d703f7a92a088b400980c17249f34640a5e (diff) | |
download | xv6-labs-13a96baefc0ff5d8262c4bc8c797bee4b157443c.tar.gz xv6-labs-13a96baefc0ff5d8262c4bc8c797bee4b157443c.tar.bz2 xv6-labs-13a96baefc0ff5d8262c4bc8c797bee4b157443c.zip |
Dirt simple logging
Passes usertests and stressfs
Seems to recover correctly in a number of simple cases
Diffstat (limited to 'syscall.c')
-rw-r--r-- | syscall.c | 49 |
1 files changed, 31 insertions, 18 deletions
@@ -98,39 +98,52 @@ extern int sys_wait(void); extern int sys_write(void); extern int sys_uptime(void); +int +sys_init(void) +{ + initlog(); + return 0; +} + static int (*syscalls[])(void) = { -[SYS_chdir] sys_chdir, -[SYS_close] sys_close, -[SYS_dup] sys_dup, -[SYS_exec] sys_exec, -[SYS_exit] sys_exit, +[SYS_init] sys_init, [SYS_fork] sys_fork, -[SYS_fstat] sys_fstat, -[SYS_getpid] sys_getpid, -[SYS_kill] sys_kill, -[SYS_link] sys_link, -[SYS_mkdir] sys_mkdir, -[SYS_mknod] sys_mknod, -[SYS_open] sys_open, +[SYS_exit] sys_exit, +[SYS_wait] sys_wait, [SYS_pipe] sys_pipe, [SYS_read] sys_read, +[SYS_kill] sys_kill, +[SYS_exec] sys_exec, +[SYS_fstat] sys_fstat, +[SYS_chdir] sys_chdir, +[SYS_dup] sys_dup, +[SYS_getpid] sys_getpid, [SYS_sbrk] sys_sbrk, [SYS_sleep] sys_sleep, -[SYS_unlink] sys_unlink, -[SYS_wait] sys_wait, -[SYS_write] sys_write, [SYS_uptime] sys_uptime, +// File system calls that are run in a transaction: +[SYS_open] sys_open, +[SYS_write] sys_write, +[SYS_mknod] sys_mknod, +[SYS_unlink] sys_unlink, +[SYS_link] sys_link, +[SYS_mkdir] sys_mkdir, +[SYS_close] sys_close, }; void syscall(void) { int num; - + num = proc->tf->eax; - if(num >= 0 && num < NELEM(syscalls) && syscalls[num]) + if(num >= 0 && num < SYS_open && syscalls[num]) { + proc->tf->eax = syscalls[num](); + } else if (num >= SYS_open && num < NELEM(syscalls) && syscalls[num]) { + begin_trans(); proc->tf->eax = syscalls[num](); - else { + commit_trans(); + } else { cprintf("%d %s: unknown sys call %d\n", proc->pid, proc->name, num); proc->tf->eax = -1; |