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:
M | fs.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.