diff options
| -rw-r--r-- | console.c | 2 | ||||
| -rw-r--r-- | defs.h | 2 | ||||
| -rw-r--r-- | fs.c | 8 | ||||
| -rw-r--r-- | fs.h | 2 | ||||
| -rw-r--r-- | init.c | 3 | ||||
| -rw-r--r-- | main.c | 7 | ||||
| -rw-r--r-- | proc.c | 3 | ||||
| -rw-r--r-- | proc.h | 1 | 
8 files changed, 24 insertions, 4 deletions
| @@ -160,7 +160,7 @@ panic(char *s)  {    __asm __volatile("cli");    use_console_lock = 0; -  cprintf("panic: "); +  cprintf("panic (%d): ", cpu());    cprintf(s, 0);    cprintf("\n", 0);    panicked = 1; // freeze other CPU @@ -110,11 +110,13 @@ void bwrite(struct buf *, uint);  void brelse(struct buf *);  // fs.c +extern uint rootdev;  void iinit(void);  struct inode * iget(uint dev, uint inum);  void ilock(struct inode *ip);  void iunlock(struct inode *ip);  void idecref(struct inode *ip); +void iincref(struct inode *ip);  void iput(struct inode *ip);  struct inode * namei(char *path, int, uint *);  void stati(struct inode *ip, struct stat *st); @@ -287,6 +287,14 @@ idecref(struct inode *ip)  }  void +iincref(struct inode *ip) +{ +  ilock(ip); +  ip->count++; +  iunlock(ip); +} + +void  stati(struct inode *ip, struct stat *st)  {    st->st_dev = ip->dev; @@ -36,3 +36,5 @@ struct dirent {    ushort inum;    char name[DIRSIZ];  }; + + @@ -1,5 +1,6 @@ -#include "user.h"  #include "types.h" +#include "stat.h" +#include "user.h"  #include "fs.h"  #include "fcntl.h" @@ -68,13 +68,14 @@ main0(void)    p->sz = 4 * PAGE;    p->mem = kalloc(p->sz);    memset(p->mem, 0, p->sz); -  p->kstack = kalloc(KSTACKSIZE); -  p->tf = (struct trapframe *) (p->kstack + KSTACKSIZE - sizeof(struct trapframe)); +  p->kstack = kalloc(KSTACKSIbZE); +  p->tf = (struct trapframe *) (p->kstack + KSTACKSIZE) - 1;    memset(p->tf, 0, sizeof(struct trapframe));    p->tf->es = p->tf->ds = p->tf->ss = (SEG_UDATA << 3) | 3;    p->tf->cs = (SEG_UCODE << 3) | 3;    p->tf->eflags = FL_IF;    setupsegs(p); +  // curproc[cpu()] = p;    // initialize I/O devices, let them enable interrupts    console_init(); @@ -90,6 +91,8 @@ main0(void)    cpus[cpu()].nlock--;    sti(); +  // p->cwd = iget(rootdev, 1); +  // iunlock(p->cwd);    p = copyproc(&proc[0]);    //load_icode(p, _binary_usertests_start, (uint) _binary_usertests_size); @@ -124,6 +124,9 @@ copyproc(struct proc* p)        fd_incref(np->fds[i]);    } +  // np->cwd = p->cwd; +  // iincref(p->cwd); +    return np;  } @@ -46,6 +46,7 @@ struct proc{    void *chan; // sleep    int killed;    struct fd *fds[NOFILE]; +  struct inode *cwd;    struct taskstate ts;  // only to give cpu address of kernel stack    struct segdesc gdt[NSEGS]; | 
