move ialloc body up, avoiding double check for end of loop
This commit is contained in:
parent
32eea7665a
commit
95c07f8267
1 changed files with 7 additions and 11 deletions
18
fs.c
18
fs.c
|
@ -201,20 +201,16 @@ ialloc(uint dev, short type)
|
||||||
bp = bread(dev, IBLOCK(inum));
|
bp = bread(dev, IBLOCK(inum));
|
||||||
dip = &((struct dinode*)(bp->data))[inum % IPB];
|
dip = &((struct dinode*)(bp->data))[inum % IPB];
|
||||||
if(dip->type == 0) { // a free inode
|
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);
|
brelse(bp);
|
||||||
}
|
}
|
||||||
|
panic("ialloc: no inodes");
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Free the given inode from its file system.
|
// Free the given inode from its file system.
|
||||||
|
|
Loading…
Reference in a new issue