FLEX_BG Kernel support v2.
PATCH 1/1 FLEX_BG Kernel support v2.
From: Jose R. Santos <[email protected]>
FLEX_BG Kernel support v2.
This feature relaxes check restrictions on where each block groups meta data is located within the storage media. This allows for the allocation of bitmaps or inode tables outside the block group boundaries in cases where bad blocks forces us to look for new blocks which the owning block group can not satisfy. This will also allow for new meta-data allocation schemes to improve performance and scalability.
--
fs/ext4/super.c | 9 +++++++-- include/linux/ext4_fs.h | 4 +++- 2 files changed, 10 insertions(+), 3 deletions(-)
fs/ext4/super.c +7 -2
@@ -1248,13 +1248,17 @@ static int ext4_check_descriptors (struct super_block * sb)ext4_fsblk_t inode_table;struct ext4_group_desc * gdp =NULL ;int desc_block =0 ; +int flexbg_bg =0 ;int i; +if (EXT4_HAS_INCOMPAT_FEATURE (sb,EXT4_FEATURE_INCOMPAT_FLEX_BG )) + flexbg_flag =1 ; +ext4_debug ("Checking group descriptors" );for (i =0 ; i < sbi->s_groups_count; i++) { -if (i == sbi->s_groups_count -1 ) +if (i == sbi->s_groups_count -1 || flexbg_flag) last_block =ext4_blocks_count (sbi->s_es) -1 ;else last_block = first_block +
@@ -1291,7 +1295,8 @@ static int ext4_check_descriptors (struct super_block * sb) i, inode_table);return 0 ; } - first_block +=EXT4_BLOCKS_PER_GROUP (sb); +if (!flexbg_flag) + first_block +=EXT4_BLOCKS_PER_GROUP (sb); gdp = (struct ext4_group_desc *) ((__u8 *)gdp +EXT4_DESC_SIZE (sb)); }
include/linux/ext4_fs.h +3 -1
@@ -702,13 +702,15 @@ static inline int ext4_valid_inum(struct super_block *sb, unsigned long ino)#define EXT4_FEATURE_INCOMPAT_META_BG 0x0010#define EXT4_FEATURE_INCOMPAT_EXTENTS 0x0040/* extents support */ #define EXT4_FEATURE_INCOMPAT_64BIT 0x0080 +#define EXT4_FEATURE_INCOMPAT_FLEX_BG 0x0200#define EXT4_FEATURE_COMPAT_SUPP EXT2_FEATURE_COMPAT_EXT_ATTR#define EXT4_FEATURE_INCOMPAT_SUPP (EXT4_FEATURE_INCOMPAT_FILETYPE| \ EXT4_FEATURE_INCOMPAT_RECOVER| \ EXT4_FEATURE_INCOMPAT_META_BG| \ EXT4_FEATURE_INCOMPAT_EXTENTS| \ - EXT4_FEATURE_INCOMPAT_64BIT) + EXT4_FEATURE_INCOMPAT_64BIT| \ + EXT4_FEATURE_INCOMPAT_FLEX_BG)#define EXT4_FEATURE_RO_COMPAT_SUPP (EXT4_FEATURE_RO_COMPAT_SPARSE_SUPER| \ EXT4_FEATURE_RO_COMPAT_LARGE_FILE| \ EXT4_FEATURE_RO_COMPAT_DIR_NLINK | \
fs/ext4/super.c static int ext4_check_descriptors (struct super_block * sb) · line 1255
Quoted 9 lines · Jose R. Santos
fs/ext4/super.c +3
-0@@ -1248,13 +1248,17 @@ static int ext4_check_descriptors (struct super_block * sb)ext4_fsblk_t inode_table;struct ext4_group_desc * gdp =NULL ;int desc_block =0 ; +int flexbg_bg =0 ;int i; +if (EXT4_HAS_INCOMPAT_FEATURE (sb,EXT4_FEATURE_INCOMPAT_FLEX_BG )) + flexbg_flag =1 ;
Umm, have you compiled this? "int flexbg_bg" and "flexbg_flag"...
Cheers, Andreas
--
Andreas Dilger
Principal Software Engineer
Cluster File Systems, Inc.
Quoted 8 lines · On Wed, 12 Sep 2007 01:27:54 -0600 Andreas Dilger <[email protected]> wrote:
Quoted 7 lines · Jose R. Santos
(quoted diff) +1
-0@@ -1248,13 +1248,17 @@ static int ext4_check_descriptors (struct super_block * sb) ext4_fsblk_t inode_table; struct ext4_group_desc * gdp = NULL; int desc_block = 0; + int flexbg_bg = 0; int i;
Quoted 4 lines
Review static int ext4_check_descriptors (struct super_block * sb) · line 1255
Quoted 2 lines
(quoted diff) +2
-0+ if (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_FLEX_BG)) + flexbg_flag = 1;Umm, have you compiled this? "int
flexbg_bg" and "flexbg_flag"...
Compiled - Yes
Tested - Yes
Run "stg refresh" before sending the patch - No
-JRS
commit 27e75138890129895a5639f602fec564479583b3
Author: Jose R. Santos <[email protected]> Date: Wed Sep 12 06:56:58 2007 -0500
FLEX_BG Kernel support v2.
This feature relaxes check restrictions on where each block groups meta data is located within the storage media. This allows for the allocation of bitmaps or inode tables outside the block group boundaries in cases where bad blocks forces us to look for new blocks which the owning block group can not satisfy. This will also allow for new meta-data allocation schemes to improve performance and scalability.
fs/ext4/super.c +7 -2
@@ -1248,13 +1248,17 @@ static int ext4_check_descriptors (struct super_block * sb)ext4_fsblk_t inode_table;struct ext4_group_desc * gdp =NULL ;int desc_block =0 ; +int flexbg_flag =0 ;int i; +if (EXT4_HAS_INCOMPAT_FEATURE (sb,EXT4_FEATURE_INCOMPAT_FLEX_BG )) + flexbg_flag =1 ; +ext4_debug ("Checking group descriptors" );for (i =0 ; i < sbi->s_groups_count; i++) { -if (i == sbi->s_groups_count -1 ) +if (i == sbi->s_groups_count -1 || flexbg_flag) last_block =ext4_blocks_count (sbi->s_es) -1 ;else last_block = first_block +
@@ -1291,7 +1295,8 @@ static int ext4_check_descriptors (struct super_block * sb) i, inode_table);return 0 ; } - first_block +=EXT4_BLOCKS_PER_GROUP (sb); +if (!flexbg_flag) + first_block +=EXT4_BLOCKS_PER_GROUP (sb); gdp = (struct ext4_group_desc *) ((__u8 *)gdp +EXT4_DESC_SIZE (sb)); }
include/linux/ext4_fs.h +3 -1
@@ -702,13 +702,15 @@ static inline int ext4_valid_inum(struct super_block *sb, unsigned long ino)#define EXT4_FEATURE_INCOMPAT_META_BG 0x0010#define EXT4_FEATURE_INCOMPAT_EXTENTS 0x0040/* extents support */ #define EXT4_FEATURE_INCOMPAT_64BIT 0x0080 +#define EXT4_FEATURE_INCOMPAT_FLEX_BG 0x0200#define EXT4_FEATURE_COMPAT_SUPP EXT2_FEATURE_COMPAT_EXT_ATTR#define EXT4_FEATURE_INCOMPAT_SUPP (EXT4_FEATURE_INCOMPAT_FILETYPE| \ EXT4_FEATURE_INCOMPAT_RECOVER| \ EXT4_FEATURE_INCOMPAT_META_BG| \ EXT4_FEATURE_INCOMPAT_EXTENTS| \ - EXT4_FEATURE_INCOMPAT_64BIT) + EXT4_FEATURE_INCOMPAT_64BIT| \ + EXT4_FEATURE_INCOMPAT_FLEX_BG)#define EXT4_FEATURE_RO_COMPAT_SUPP (EXT4_FEATURE_RO_COMPAT_SPARSE_SUPER| \ EXT4_FEATURE_RO_COMPAT_LARGE_FILE| \ EXT4_FEATURE_RO_COMPAT_DIR_NLINK | \