diff -urN oldtree/.links/bookmarks.html newtree/.links/bookmarks.html
--- oldtree/.links/bookmarks.html	2006-08-20 04:44:32.912179750 -0400
+++ newtree/.links/bookmarks.html	1969-12-31 19:00:00.000000000 -0500
@@ -1,27 +0,0 @@
-<HTML>
-<HEAD>
-<!-- This is an automatically generated file.
-It will be read and overwritten.
-Do Not Edit! -->
-<TITLE>Links bookmarks</TITLE>
-</HEAD>
-<H1>Links bookmarks</H1>
-
-<DL><P>
-    <DT><H3>Links</H3>
-<DL>
-    <DT><H3>English</H3>
-<DL>
-    <DT><A HREF="http://atrey.karlin.mff.cuni.cz/~clock/twibright/links/calibration.html">Calibration Procedure</A>
-    <DT><A HREF="http://atrey.karlin.mff.cuni.cz/~clock/twibright/links/">Links Homepage</A>
-    <DT><A HREF="http://links.sourceforge.net/docs/manual-0.90-en/">Links Manual</A>
-</DL>
-    <DT><H3>Česky</H3>
-<DL>
-    <DT><A HREF="http://atrey.karlin.mff.cuni.cz/~clock/twibright/links/kalibrace.html">Kalibrační procedura</A>
-    <DT><A HREF="http://atrey.karlin.mff.cuni.cz/~clock/twibright/links/index_cz.html">Links: domácí stránka</A>
-    <DT><A HREF="http://links.sourceforge.net/docs/manual-0.90-en/">Manuál k Linksu</A>
-</DL>
-</DL>
-</DL><P>
-</HTML>
diff -urN oldtree/fs/ext3/super.c newtree/fs/ext3/super.c
--- oldtree/fs/ext3/super.c	2006-08-18 15:01:22.000000000 -0400
+++ newtree/fs/ext3/super.c	2006-08-20 04:44:53.049438250 -0400
@@ -1174,7 +1174,8 @@
 static int ext3_check_descriptors (struct super_block * sb)
 {
 	struct ext3_sb_info *sbi = EXT3_SB(sb);
-	ext3_fsblk_t block = le32_to_cpu(sbi->s_es->s_first_data_block);
+	ext3_fsblk_t first_block = le32_to_cpu(sbi->s_es->s_first_data_block);
+	ext3_fsblk_t last_block;
 	struct ext3_group_desc * gdp = NULL;
 	int desc_block = 0;
 	int i;
@@ -1183,12 +1184,17 @@
 
 	for (i = 0; i < sbi->s_groups_count; i++)
 	{
+		if (i == sbi->s_groups_count - 1)
+			last_block = sbi->s_es->s_blocks_count - 1;
+		else
+			last_block = first_block +
+				(EXT3_BLOCKS_PER_GROUP(sb) - 1);
+
 		if ((i % EXT3_DESC_PER_BLOCK(sb)) == 0)
 			gdp = (struct ext3_group_desc *)
 					sbi->s_group_desc[desc_block++]->b_data;
-		if (le32_to_cpu(gdp->bg_block_bitmap) < block ||
-		    le32_to_cpu(gdp->bg_block_bitmap) >=
-				block + EXT3_BLOCKS_PER_GROUP(sb))
+		if (le32_to_cpu(gdp->bg_block_bitmap) < first_block ||
+		    le32_to_cpu(gdp->bg_block_bitmap) > last_block)
 		{
 			ext3_error (sb, "ext3_check_descriptors",
 				    "Block bitmap for group %d"
@@ -1197,9 +1203,8 @@
 					le32_to_cpu(gdp->bg_block_bitmap));
 			return 0;
 		}
-		if (le32_to_cpu(gdp->bg_inode_bitmap) < block ||
-		    le32_to_cpu(gdp->bg_inode_bitmap) >=
-				block + EXT3_BLOCKS_PER_GROUP(sb))
+		if (le32_to_cpu(gdp->bg_inode_bitmap) < first_block ||
+		    le32_to_cpu(gdp->bg_inode_bitmap) > last_block)
 		{
 			ext3_error (sb, "ext3_check_descriptors",
 				    "Inode bitmap for group %d"
@@ -1208,9 +1213,9 @@
 					le32_to_cpu(gdp->bg_inode_bitmap));
 			return 0;
 		}
-		if (le32_to_cpu(gdp->bg_inode_table) < block ||
-		    le32_to_cpu(gdp->bg_inode_table) + sbi->s_itb_per_group >=
-		    block + EXT3_BLOCKS_PER_GROUP(sb))
+		if (le32_to_cpu(gdp->bg_inode_table) < first_block ||
+		    le32_to_cpu(gdp->bg_inode_table) + sbi->s_itb_per_group >
+		    last_block)
 		{
 			ext3_error (sb, "ext3_check_descriptors",
 				    "Inode table for group %d"
@@ -1219,7 +1224,7 @@
 					le32_to_cpu(gdp->bg_inode_table));
 			return 0;
 		}
-		block += EXT3_BLOCKS_PER_GROUP(sb);
+		first_block += EXT3_BLOCKS_PER_GROUP(sb);
 		gdp++;
 	}
 
@@ -1623,10 +1628,9 @@
 
 	if (EXT3_BLOCKS_PER_GROUP(sb) == 0)
 		goto cantfind_ext3;
-	sbi->s_groups_count = (le32_to_cpu(es->s_blocks_count) -
-			       le32_to_cpu(es->s_first_data_block) +
-			       EXT3_BLOCKS_PER_GROUP(sb) - 1) /
-			      EXT3_BLOCKS_PER_GROUP(sb);
+	sbi->s_groups_count = ((le32_to_cpu(es->s_blocks_count) -
+			       le32_to_cpu(es->s_first_data_block) - 1)
+				       / EXT3_BLOCKS_PER_GROUP(sb)) + 1;
 	db_count = (sbi->s_groups_count + EXT3_DESC_PER_BLOCK(sb) - 1) /
 		   EXT3_DESC_PER_BLOCK(sb);
 	sbi->s_group_desc = kmalloc(db_count * sizeof (struct buffer_head *),
