diff -urN ext2-4/fs/ext2/ialloc.c ext2-5/fs/ext2/ialloc.c
--- ext2-4/fs/ext2/ialloc.c	Fri Dec  1 11:00:19 2000
+++ ext2-5/fs/ext2/ialloc.c	Fri Dec  1 11:00:49 2000
@@ -88,8 +88,7 @@
 static int load_inode_bitmap (struct super_block * sb,
 			      unsigned int block_group)
 {
-	int i, j, retval = 0, slot = 0;
-	unsigned long inode_bitmap_number;
+	int i, retval = 0, slot = 0;
 	struct ext2_sb_info *sbi = &sb->u.ext2_sb;
 	struct buffer_head *bh = sbi->s_inode_bitmap[0];
 
@@ -119,7 +118,8 @@
 	     i++)
 		;
 	if (i < sbi->s_loaded_inode_bitmaps) {
-		inode_bitmap_number = sbi->s_inode_bitmap_number[i];
+		int j;
+		unsigned long nr = sbi->s_inode_bitmap_number[i];
 		bh = sbi->s_inode_bitmap[i];
 		for (j = i; j > 0; j--) {
 			sbi->s_inode_bitmap_number[j] =
@@ -127,18 +127,17 @@
 			sbi->s_inode_bitmap[j] =
 				sbi->s_inode_bitmap[j - 1];
 		}
-		sbi->s_inode_bitmap_number[0] = inode_bitmap_number;
+		sbi->s_inode_bitmap_number[0] = nr;
 		sbi->s_inode_bitmap[0] = bh;
-
+		if (bh)
+			goto found;
 		/*
 		 * There's still one special case here --- if inode_bitmap == 0
 		 * then our last attempt to read the bitmap failed and we have
 		 * just ended up caching that failure.  Try again to read it.
 		 */
-		if (bh)
-			goto found;
-		
 	} else {
+		int j;
 		if (sbi->s_loaded_inode_bitmaps < EXT2_MAX_GROUP_LOADED)
 			sbi->s_loaded_inode_bitmaps++;
 		else