diff options
author | rtm <rtm> | 2006-08-12 16:47:48 +0000 |
---|---|---|
committer | rtm <rtm> | 2006-08-12 16:47:48 +0000 |
commit | 7ce01cf9be997dfec50786b8aec663c84b63c209 (patch) | |
tree | 9117d6dcc2f27041610659595e2f1cacb8a538ed /fs.c | |
parent | 4357207237e074b5a42ee9739eadd040fd1cf296 (diff) | |
download | xv6-labs-7ce01cf9be997dfec50786b8aec663c84b63c209.tar.gz xv6-labs-7ce01cf9be997dfec50786b8aec663c84b63c209.tar.bz2 xv6-labs-7ce01cf9be997dfec50786b8aec663c84b63c209.zip |
mknod set nlink = 1
usertests for concurrent create/delete, and read() after unlink()
Diffstat (limited to 'fs.c')
-rw-r--r-- | fs.c | 8 |
1 files changed, 5 insertions, 3 deletions
@@ -412,6 +412,8 @@ namei(char *path, uint *ret_pinum) pinum = dp->inum; iput(dp); dp = iget(dev, ninum); + if(dp->type == 0 || dp->nlink < 1) + panic("namei"); while(*cp == '/') cp++; } @@ -443,7 +445,7 @@ mknod(char *cp, short type, short major, short minor) ip->major = major; ip->minor = minor; ip->size = 0; - ip->nlink = 0; + ip->nlink = 1; iupdate (ip); // write new inode to disk @@ -467,8 +469,8 @@ mknod(char *cp, short type, short major, short minor) brelse(bp); dp->size += sizeof(struct dirent); // update directory inode iupdate (dp); - iput(dp); - return ip; + iput(dp); + return ip; } int |