diff options
| author | kolya <kolya> | 2008-10-17 12:42:13 +0000 | 
|---|---|---|
| committer | kolya <kolya> | 2008-10-17 12:42:13 +0000 | 
| commit | 15a269363777c0cd95e2a56e7def0a4dc3122e21 (patch) | |
| tree | f653c907fab5acc8d5dc4600b7596297ba4eee66 | |
| parent | f3e87bc838a09163f91ab79696a34f8c19386c55 (diff) | |
| download | xv6-labs-15a269363777c0cd95e2a56e7def0a4dc3122e21.tar.gz xv6-labs-15a269363777c0cd95e2a56e7def0a4dc3122e21.tar.bz2 xv6-labs-15a269363777c0cd95e2a56e7def0a4dc3122e21.zip | |
try harder to get directory refcounts right
| -rw-r--r-- | sysfile.c | 10 | 
1 files changed, 8 insertions, 2 deletions
| @@ -199,6 +199,10 @@ sys_unlink(void)    memset(&de, 0, sizeof(de));    if(writei(dp, (char*)&de, off, sizeof(de)) != sizeof(de))      panic("unlink: writei"); +  if(ip->type == T_DIR){ +    dp->nlink--; +    iupdate(dp); +  }    iunlockput(dp);    ip->nlink--; @@ -247,8 +251,10 @@ create(char *path, int canexist, short type, short major, short minor)    }    if(dirlink(dp, name, ip->inum) < 0){ -    dp->nlink--; -    iupdate(dp); +    if(type == T_DIR){ +      dp->nlink--; +      iupdate(dp); +    }      iunlockput(dp);      ip->nlink = 0; | 
