diff --git a/initcode.S b/initcode.S
index d86660a4752084e34feb86a959c786321a442e6f..109341a44190299c1b94b16df56474f55d51925c 100644
--- a/initcode.S
+++ b/initcode.S
@@ -7,8 +7,6 @@
 # exec(init, argv)
 .globl start
 start:
-  movl $SYS_init, %eax
-  int $T_SYSCALL
   pushl $argv
   pushl $init
   pushl $0  // where caller pc would be
diff --git a/main.c b/main.c
index 129a0e98cbd694f1b900a2c8ecf8b391b356e252..13fed7c1580b9042d3658ef4901b7be08c937f47 100644
--- a/main.c
+++ b/main.c
@@ -60,7 +60,7 @@ mpmain(void)
   scheduler();     // start running processes
 }
 
-pde_t enterpgdir[];
+pde_t enterpgdir[];  // For entry.S
 
 // Start the non-boot (AP) processors.
 static void
diff --git a/proc.c b/proc.c
index 96a9c8ec5571f03af4611ce0e6003ab281a894d4..23a53bca827385852b46e4781f54525db3751d45 100644
--- a/proc.c
+++ b/proc.c
@@ -322,8 +322,14 @@ yield(void)
 void
 forkret(void)
 {
+  static int first = 1;
   // Still holding ptable.lock from scheduler.
   release(&ptable.lock);
+
+  if (first) {
+    first = 0;
+    initlog();
+  }
   
   // Return to "caller", actually trapret (see allocproc).
 }
diff --git a/syscall.c b/syscall.c
index 71c369c6d5ec2077a065571151f8129cf7ede45d..0918da7131988eb24cbf830fb93286198701aefa 100644
--- a/syscall.c
+++ b/syscall.c
@@ -99,15 +99,7 @@ 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_init]    sys_init,
 [SYS_fork]    sys_fork,
 [SYS_exit]    sys_exit,
 [SYS_wait]    sys_wait,
@@ -122,7 +114,6 @@ static int (*syscalls[])(void) = {
 [SYS_sbrk]    sys_sbrk,
 [SYS_sleep]   sys_sleep,
 [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,
diff --git a/syscall.h b/syscall.h
index e9e43a21e45aa33b3d880d51ef8a2553e7d497ce..59a4576eda34f697dcc5be59e491cdd0ad6c3ced 100644
--- a/syscall.h
+++ b/syscall.h
@@ -1,5 +1,4 @@
 // System call numbers
-#define SYS_init    0
 #define SYS_fork    1
 #define SYS_exit    2
 #define SYS_wait    3