summaryrefslogtreecommitdiff
path: root/fs.c
diff options
context:
space:
mode:
authorrtm <rtm>2006-08-12 16:47:48 +0000
committerrtm <rtm>2006-08-12 16:47:48 +0000
commit7ce01cf9be997dfec50786b8aec663c84b63c209 (patch)
tree9117d6dcc2f27041610659595e2f1cacb8a538ed /fs.c
parent4357207237e074b5a42ee9739eadd040fd1cf296 (diff)
downloadxv6-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.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/fs.c b/fs.c
index fa71c6e..d5cc899 100644
--- a/fs.c
+++ b/fs.c
@@ -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