diff options
| -rw-r--r-- | fs.c | 18 | 
1 files changed, 7 insertions, 11 deletions
| @@ -201,20 +201,16 @@ ialloc(uint dev, short type)      bp = bread(dev, IBLOCK(inum));      dip = &((struct dinode*)(bp->data))[inum % IPB];      if(dip->type == 0) {  // a free inode -      break; +      memset(dip, 0, sizeof(*dip)); +      dip->type = type; +      bwrite(bp, IBLOCK(inum));   // mark it allocated on the disk +      brelse(bp); +      ip = iget(dev, inum); +      return ip;      }      brelse(bp);    } - -  if(inum >= ninodes) -    panic("ialloc: no inodes left"); - -  memset(dip, 0, sizeof(*dip)); -  dip->type = type; -  bwrite(bp, IBLOCK(inum));   // mark it allocated on the disk -  brelse(bp); -  ip = iget(dev, inum); -  return ip; +  panic("ialloc: no inodes");  }  // Free the given inode from its file system. | 
