diff options
| author | Frans Kaashoek <kaashoek@mit.edu> | 2012-08-22 20:20:17 -0400 | 
|---|---|---|
| committer | Frans Kaashoek <kaashoek@mit.edu> | 2012-08-22 20:20:17 -0400 | 
| commit | 432acbaf9e8817e16026bfcaaa8bca0ba7c8a6f8 (patch) | |
| tree | 0b107cc92179b5b936d36174ff5af87e8fd3eec8 | |
| parent | 4ce832ddd280a4cea36e16115ddeaea74213314e (diff) | |
| parent | 9d59eb015141697da616a4b98ac27cf4269cd780 (diff) | |
| download | xv6-labs-432acbaf9e8817e16026bfcaaa8bca0ba7c8a6f8.tar.gz xv6-labs-432acbaf9e8817e16026bfcaaa8bca0ba7c8a6f8.tar.bz2 xv6-labs-432acbaf9e8817e16026bfcaaa8bca0ba7c8a6f8.zip | |
Merge branch 'master' of git+ssh://amsterdam.csail.mit.edu/home/am0/6.828/xv6
| -rw-r--r-- | bio.c | 4 | ||||
| -rw-r--r-- | defs.h | 4 | ||||
| -rw-r--r-- | file.c | 8 | ||||
| -rw-r--r-- | log.c | 1 | ||||
| -rw-r--r-- | syscall.c | 18 | ||||
| -rw-r--r-- | sysfile.c | 10 | 
6 files changed, 28 insertions, 17 deletions
| @@ -79,9 +79,9 @@ bget(uint dev, uint sector)      }    } -  // Not cached; recycle some existing buffer. +  // Not cached; recycle some non-busy and clean buffer.    for(b = bcache.head.prev; b != &bcache.head; b = b->prev){ -    if((b->flags & B_BUSY) == 0){ +    if((b->flags & B_BUSY) == 0 && (b->flags & B_DIRTY) == 0){        b->dev = dev;        b->sector = sector;        b->flags = B_BUSY; @@ -142,8 +142,8 @@ char*           strncpy(char*, const char*, int);  int             argint(int, int*);  int             argptr(int, char**, int);  int             argstr(int, char**); -int             fetchint(struct proc*, uint, int*); -int             fetchstr(struct proc*, uint, char**); +int             fetchint(uint, int*); +int             fetchstr(uint, char**);  void            syscall(void);  // timer.c @@ -1,3 +1,7 @@ +// +// File descriptors +// +  #include "types.h"  #include "defs.h"  #include "param.h" @@ -87,7 +91,7 @@ filestat(struct file *f, struct stat *st)    return -1;  } -// Read from file f.  Addr is kernel address. +// Read from file f.  int  fileread(struct file *f, char *addr, int n)  { @@ -108,7 +112,7 @@ fileread(struct file *f, char *addr, int n)  }  //PAGEBREAK! -// Write to file f.  Addr is kernel address. +// Write to file f.  int  filewrite(struct file *f, char *addr, int n)  { @@ -177,6 +177,7 @@ log_write(struct buf *b)    brelse(lbuf);    if (i == log.lh.n)      log.lh.n++; +  b->flags |= B_DIRTY; // XXX prevent eviction  }  //PAGEBREAK! @@ -13,28 +13,28 @@  // library system call function. The saved user %esp points  // to a saved program counter, and then the first argument. -// Fetch the int at addr from process p. +// Fetch the int at addr from the current process.  int -fetchint(struct proc *p, uint addr, int *ip) +fetchint(uint addr, int *ip)  { -  if(addr >= p->sz || addr+4 > p->sz) +  if(addr >= proc->sz || addr+4 > proc->sz)      return -1;    *ip = *(int*)(addr);    return 0;  } -// Fetch the nul-terminated string at addr from process p. +// Fetch the nul-terminated string at addr from the current process.  // Doesn't actually copy the string - just sets *pp to point at it.  // Returns length of string, not including nul.  int -fetchstr(struct proc *p, uint addr, char **pp) +fetchstr(uint addr, char **pp)  {    char *s, *ep; -  if(addr >= p->sz) +  if(addr >= proc->sz)      return -1;    *pp = (char*)addr; -  ep = (char*)p->sz; +  ep = (char*)proc->sz;    for(s = *pp; s < ep; s++)      if(*s == 0)        return s - *pp; @@ -45,7 +45,7 @@ fetchstr(struct proc *p, uint addr, char **pp)  int  argint(int n, int *ip)  { -  return fetchint(proc, proc->tf->esp + 4 + 4*n, ip); +  return fetchint(proc->tf->esp + 4 + 4*n, ip);  }  // Fetch the nth word-sized system call argument as a pointer @@ -74,7 +74,7 @@ argstr(int n, char **pp)    int addr;    if(argint(n, &addr) < 0)      return -1; -  return fetchstr(proc, addr, pp); +  return fetchstr(addr, pp);  }  extern int sys_chdir(void); @@ -1,3 +1,9 @@ +// +// File-system system calls. +// Mostly argument checking, since we don't trust +// user code, and calls into file.c and fs.c. +// +  #include "types.h"  #include "defs.h"  #include "param.h" @@ -382,13 +388,13 @@ sys_exec(void)    for(i=0;; i++){      if(i >= NELEM(argv))        return -1; -    if(fetchint(proc, uargv+4*i, (int*)&uarg) < 0) +    if(fetchint(uargv+4*i, (int*)&uarg) < 0)        return -1;      if(uarg == 0){        argv[i] = 0;        break;      } -    if(fetchstr(proc, uarg, &argv[i]) < 0) +    if(fetchstr(uarg, &argv[i]) < 0)        return -1;    }    return exec(path, argv); | 
