From 95c07f82670df0540fdb8fbb61f8d3fc335e6880 Mon Sep 17 00:00:00 2001 From: rsc Date: Wed, 8 Aug 2007 09:53:46 +0000 Subject: [PATCH] move ialloc body up, avoiding double check for end of loop --- fs.c | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/fs.c b/fs.c index 43d8722..d3d10e1 100644 --- 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.