diff options
author | kaashoek <kaashoek> | 2006-08-09 01:19:48 +0000 |
---|---|---|
committer | kaashoek <kaashoek> | 2006-08-09 01:19:48 +0000 |
commit | 6c0e444fcdf7ba21442513acbc69c7fca9def06b (patch) | |
tree | 0b6e8d1471610e4304b2f5d7b9c7d68fc6c28206 /fs.c | |
parent | 241113985f7122c65345885dec02e008601ff7ef (diff) | |
download | xv6-labs-6c0e444fcdf7ba21442513acbc69c7fca9def06b.tar.gz xv6-labs-6c0e444fcdf7ba21442513acbc69c7fca9def06b.tar.bz2 xv6-labs-6c0e444fcdf7ba21442513acbc69c7fca9def06b.zip |
oops, update directory inode too
Diffstat (limited to 'fs.c')
-rw-r--r-- | fs.c | 11 |
1 files changed, 9 insertions, 2 deletions
@@ -323,6 +323,10 @@ mknod(struct inode *dp, char *cp, short type, short major, short minor) if (ip == 0) return 0; ip->major = major; ip->minor = minor; + ip->size = 0; + ip->nlink = 0; + + iupdate (ip); // write new inode to disk for(off = 0; off < dp->size; off += BSIZE) { bp = bread(dp->dev, bmap(dp, off / BSIZE)); @@ -340,8 +344,11 @@ mknod(struct inode *dp, char *cp, short type, short major, short minor) found: ep->inum = ip->inum; for(i = 0; i < DIRSIZ && cp[i]; i++) ep->name[i] = cp[i]; - bwrite (dp->dev, bp, bmap(dp, off/BSIZE)); // write directory + bwrite (dp->dev, bp, bmap(dp, off/BSIZE)); // write directory block brelse(bp); - iupdate (ip); + + dp->size += sizeof(struct dirent); // update directory inode + iupdate (dp); + return ip; } |