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 | |
| parent | 241113985f7122c65345885dec02e008601ff7ef (diff) | |
| download | xv6-labs-6c0e444fcdf7ba21442513acbc69c7fca9def06b.tar.gz xv6-labs-6c0e444fcdf7ba21442513acbc69c7fca9def06b.tar.bz2 xv6-labs-6c0e444fcdf7ba21442513acbc69c7fca9def06b.zip | |
oops, update directory inode too
| -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;  } | 
