A checksum of each group descriptor is used to ensure that corruption in
the group descriptor's bit flags does not cause incorrect operation.
-Index: linux-2.6.18.8.orig/include/linux/ext3_fs.h
+Index: linux-rhel5/include/linux/ext3_fs.h
===================================================================
---- linux-2.6.18.8.orig.orig/include/linux/ext3_fs.h 2007-07-02 11:09:25.000000000 +0200
-+++ linux-2.6.18.8.orig/include/linux/ext3_fs.h 2007-07-02 11:09:31.000000000 +0200
+--- linux-rhel5.orig/include/linux/ext3_fs.h 2007-07-18 17:32:04.000000000 +0200
++++ linux-rhel5/include/linux/ext3_fs.h 2007-07-18 17:32:15.000000000 +0200
@@ -150,16 +150,22 @@ struct ext3_allocation_request {
*/
struct ext3_group_desc
EXT4_FEATURE_RO_COMPAT_DIR_NLINK| \
EXT3_FEATURE_RO_COMPAT_BTREE_DIR)
-Index: linux-2.6.18.8.orig/fs/ext3/resize.c
+Index: linux-rhel5/fs/ext3/resize.c
===================================================================
---- linux-2.6.18.8.orig.orig/fs/ext3/resize.c 2007-06-21 14:53:15.000000000 +0200
-+++ linux-2.6.18.8.orig/fs/ext3/resize.c 2007-07-02 11:09:26.000000000 +0200
+--- linux-rhel5.orig/fs/ext3/resize.c 2007-07-15 09:36:00.000000000 +0200
++++ linux-rhel5/fs/ext3/resize.c 2007-07-18 17:32:15.000000000 +0200
@@ -18,6 +18,7 @@
#include <linux/errno.h>
#include <linux/slab.h>
#define outside(b, first, last) ((b) < (first) || (b) >= (last))
#define inside(b, first, last) ((b) >= (first) && (b) < (last))
-@@ -822,6 +823,7 @@ int ext3_group_add(struct super_block *s
+@@ -834,6 +835,7 @@ int ext3_group_add(struct super_block *s
gdp->bg_inode_table = cpu_to_le32(input->inode_table);
gdp->bg_free_blocks_count = cpu_to_le16(input->free_blocks_count);
gdp->bg_free_inodes_count = cpu_to_le16(EXT3_INODES_PER_GROUP(sb));
/*
* Make the new blocks and inodes valid next. We do this before
-Index: linux-2.6.18.8.orig/fs/ext3/super.c
+Index: linux-rhel5/fs/ext3/super.c
===================================================================
---- linux-2.6.18.8.orig.orig/fs/ext3/super.c 2007-07-02 11:09:26.000000000 +0200
-+++ linux-2.6.18.8.orig/fs/ext3/super.c 2007-07-02 11:18:04.000000000 +0200
+--- linux-rhel5.orig/fs/ext3/super.c 2007-07-18 17:32:06.000000000 +0200
++++ linux-rhel5/fs/ext3/super.c 2007-07-18 17:35:03.000000000 +0200
@@ -41,6 +41,7 @@
#include "xattr.h"
#include "acl.h"
/* Called at mount-time, super-block is locked */
static int ext3_check_descriptors (struct super_block * sb)
{
-@@ -1274,6 +1360,13 @@ static int ext3_check_descriptors (struc
+@@ -1279,6 +1365,13 @@ static int ext3_check_descriptors (struc
le32_to_cpu(gdp->bg_inode_table));
return 0;
}
+ le16_to_cpu(gdp->bg_checksum));
+ return 0;
+ }
- block += EXT3_BLOCKS_PER_GROUP(sb);
+ first_block += EXT3_BLOCKS_PER_GROUP(sb);
gdp++;
}
-Index: linux-2.6.18.8.orig/fs/ext3/group.h
+Index: linux-rhel5/fs/ext3/group.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.18.8.orig/fs/ext3/group.h 2007-07-02 11:09:26.000000000 +0200
++++ linux-rhel5/fs/ext3/group.h 2007-07-18 17:32:15.000000000 +0200
@@ -0,0 +1,29 @@
+/*
+ * linux/fs/ext3/group.h
+ struct buffer_head *bh, int group,
+ struct ext3_group_desc *desc);
+#endif /* _LINUX_EXT3_GROUP_H */
-Index: linux-2.6.18.8.orig/fs/ext3/ialloc.c
+Index: linux-rhel5/fs/ext3/ialloc.c
===================================================================
---- linux-2.6.18.8.orig.orig/fs/ext3/ialloc.c 2007-07-02 11:09:26.000000000 +0200
-+++ linux-2.6.18.8.orig/fs/ext3/ialloc.c 2007-07-02 11:19:43.000000000 +0200
+--- linux-rhel5.orig/fs/ext3/ialloc.c 2007-07-18 17:32:05.000000000 +0200
++++ linux-rhel5/fs/ext3/ialloc.c 2007-07-18 17:32:15.000000000 +0200
@@ -28,6 +28,7 @@
#include "xattr.h"
- inode->i_ino = ino;
+ inode->i_ino = ino + group * EXT3_INODES_PER_GROUP(sb);
/* This is the optimal IO size (for stat), not the fs block size */
- inode->i_blksize = PAGE_SIZE;
inode->i_blocks = 0;
-Index: linux-2.6.18.8.orig/fs/ext3/mballoc.c
+ inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME_SEC;
+Index: linux-rhel5/fs/ext3/mballoc.c
===================================================================
---- linux-2.6.18.8.orig.orig/fs/ext3/mballoc.c 2007-07-02 11:09:25.000000000 +0200
-+++ linux-2.6.18.8.orig/fs/ext3/mballoc.c 2007-07-02 11:09:26.000000000 +0200
+--- linux-rhel5.orig/fs/ext3/mballoc.c 2007-07-18 17:32:04.000000000 +0200
++++ linux-rhel5/fs/ext3/mballoc.c 2007-07-18 17:32:15.000000000 +0200
@@ -36,6 +36,8 @@
#include <linux/seq_file.h>
#include <linux/version.h>
set_bit(EXT3_GROUP_INFO_NEED_INIT_BIT,
&meta_group_info[j]->bb_state);
-@@ -2972,9 +2984,17 @@ int ext3_mb_mark_diskspace_used(struct e
+@@ -2958,9 +2970,17 @@ int ext3_mb_mark_diskspace_used(struct e
mb_set_bits(bitmap_bh->b_data, ac->ac_b_ex.fe_start, ac->ac_b_ex.fe_len);
spin_lock(sb_bgl_lock(sbi, ac->ac_b_ex.fe_group));
spin_unlock(sb_bgl_lock(sbi, ac->ac_b_ex.fe_group));
percpu_counter_mod(&sbi->s_freeblocks_counter, - ac->ac_b_ex.fe_len);
-@@ -4343,6 +4363,7 @@ do_more:
+@@ -4346,6 +4366,7 @@ do_more:
spin_lock(sb_bgl_lock(sbi, block_group));
gdp->bg_free_blocks_count =
cpu_to_le16(le16_to_cpu(gdp->bg_free_blocks_count) + count);
spin_unlock(sb_bgl_lock(sbi, block_group));
percpu_counter_mod(&sbi->s_freeblocks_counter, count);
-Index: linux-2.6.18.8.orig/fs/ext3/balloc.c
+Index: linux-rhel5/fs/ext3/balloc.c
===================================================================
---- linux-2.6.18.8.orig.orig/fs/ext3/balloc.c 2007-07-02 11:09:25.000000000 +0200
-+++ linux-2.6.18.8.orig/fs/ext3/balloc.c 2007-07-02 11:09:26.000000000 +0200
+--- linux-rhel5.orig/fs/ext3/balloc.c 2007-07-18 17:32:04.000000000 +0200
++++ linux-rhel5/fs/ext3/balloc.c 2007-07-18 17:32:15.000000000 +0200
@@ -20,6 +20,7 @@
#include <linux/quotaops.h>
#include <linux/buffer_head.h>
spin_unlock(sb_bgl_lock(sbi, block_group));
percpu_counter_mod(&sbi->s_freeblocks_counter, count);
-@@ -1433,8 +1516,11 @@ allocated:
+@@ -1434,8 +1517,11 @@ allocated:
ret_block, goal_hits, goal_attempts);
spin_lock(sb_bgl_lock(sbi, group_no));