ext4: don't use ext4_error in ext4_check_descriptors
authorJosef Bacik <jbacik@redhat.com>
Wed, 30 Apr 2008 02:00:28 +0000 (22:00 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Wed, 30 Apr 2008 02:00:28 +0000 (22:00 -0400)
Because ext4_check_descriptors is called at mount time you can't use ext4_error
as it calls ext4_commit_sb, which since the sb isn't all the way initialized
causes bad things to happen (ie a panic).  This patch changes the ext4_error's
to printk's to keep this problem from happening.  Thanks much,

Signed-off-by: Josef Bacik <jbacik@redhat.com>
Signed-off-by: Mingming Cao <cmm@us.ibm.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
fs/ext4/super.c

index 3435184..52dd067 100644 (file)
@@ -1484,36 +1484,33 @@ static int ext4_check_descriptors(struct super_block *sb)
                block_bitmap = ext4_block_bitmap(sb, gdp);
                if (block_bitmap < first_block || block_bitmap > last_block)
                {
-                       ext4_error (sb, "ext4_check_descriptors",
-                                   "Block bitmap for group %lu"
-                                   " not in group (block %llu)!",
-                                   i, block_bitmap);
+                       printk(KERN_ERR "EXT4-fs: ext4_check_descriptors: "
+                              "Block bitmap for group %lu not in group "
+                              "(block %llu)!", i, block_bitmap);
                        return 0;
                }
                inode_bitmap = ext4_inode_bitmap(sb, gdp);
                if (inode_bitmap < first_block || inode_bitmap > last_block)
                {
-                       ext4_error (sb, "ext4_check_descriptors",
-                                   "Inode bitmap for group %lu"
-                                   " not in group (block %llu)!",
-                                   i, inode_bitmap);
+                       printk(KERN_ERR "EXT4-fs: ext4_check_descriptors: "
+                              "Inode bitmap for group %lu not in group "
+                              "(block %llu)!", i, inode_bitmap);
                        return 0;
                }
                inode_table = ext4_inode_table(sb, gdp);
                if (inode_table < first_block ||
                    inode_table + sbi->s_itb_per_group - 1 > last_block)
                {
-                       ext4_error (sb, "ext4_check_descriptors",
-                                   "Inode table for group %lu"
-                                   " not in group (block %llu)!",
-                                   i, inode_table);
+                       printk(KERN_ERR "EXT4-fs: ext4_check_descriptors: "
+                              "Inode table for group %lu not in group "
+                              "(block %llu)!", i, inode_table);
                        return 0;
                }
                if (!ext4_group_desc_csum_verify(sbi, i, gdp)) {
-                       ext4_error(sb, __func__,
-                                  "Checksum for group %lu failed (%u!=%u)\n",
-                                   i, le16_to_cpu(ext4_group_desc_csum(sbi, i,
-                                   gdp)), le16_to_cpu(gdp->bg_checksum));
+                       printk(KERN_ERR "EXT4-fs: ext4_check_descriptors: "
+                              "Checksum for group %lu failed (%u!=%u)\n",
+                              i, le16_to_cpu(ext4_group_desc_csum(sbi, i,
+                              gdp)), le16_to_cpu(gdp->bg_checksum));
                        return 0;
                }
                if (!flexbg_flag)