xv6

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit 95c07f82670df0540fdb8fbb61f8d3fc335e6880
parent 32eea7665a9349c507bcf31b5f0422827484f6cc
Author: rsc <rsc>
Date:   Wed,  8 Aug 2007 09:53:46 +0000

move ialloc body up, avoiding double check for end of loop

Diffstat:
Mfs.c | 18+++++++-----------
1 file changed, 7 insertions(+), 11 deletions(-)

diff --git a/fs.c b/fs.c @@ -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.