From c2d4300b8a4a13d8a78b86c386f76259f23feec2 Mon Sep 17 00:00:00 2001 From: "Jose R. Santos" Date: Mon, 13 Aug 2007 23:32:57 -0500 Subject: [PATCH] Enable FLEX_BG feature support Add FLEX_BG as a supported feature bit. Add support to mke2fs to create filesystems with FLEX_BG. Add support to tune2fs to add (and remove, if it won't break filesystem consistency) the FLEX_BG feature. Signed-off-by: Jose R. Santos Signed-off-by: "Theodore Ts'o" -- lib/e2p/feature.c | 2 ++ lib/ext2fs/ext2fs.h | 6 ++++-- misc/mke2fs.c | 7 ++++++- 3 files changed, 12 insertions(+), 3 deletions(-) --- lib/e2p/feature.c | 2 ++ lib/ext2fs/ext2fs.h | 6 ++++-- misc/mke2fs.c | 3 ++- misc/tune2fs.c | 16 +++++++++++++++- 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/lib/e2p/feature.c b/lib/e2p/feature.c index fe7e65a..4bf5630 100644 --- a/lib/e2p/feature.c +++ b/lib/e2p/feature.c @@ -67,6 +67,8 @@ static struct feature feature_list[] = { "extent" }, { E2P_FEATURE_INCOMPAT, EXT4_FEATURE_INCOMPAT_64BIT, "64bit" }, + { E2P_FEATURE_INCOMPAT, EXT4_FEATURE_INCOMPAT_FLEX_BG, + "flex_bg"}, { 0, 0, 0 }, }; diff --git a/lib/ext2fs/ext2fs.h b/lib/ext2fs/ext2fs.h index d691c1b..49bac52 100644 --- a/lib/ext2fs/ext2fs.h +++ b/lib/ext2fs/ext2fs.h @@ -433,12 +433,14 @@ typedef struct ext2_icount *ext2_icount_t; EXT2_FEATURE_INCOMPAT_COMPRESSION|\ EXT3_FEATURE_INCOMPAT_JOURNAL_DEV|\ EXT2_FEATURE_INCOMPAT_META_BG|\ - EXT3_FEATURE_INCOMPAT_RECOVER) + EXT3_FEATURE_INCOMPAT_RECOVER|\ + EXT4_FEATURE_INCOMPAT_FLEX_BG) #else #define EXT2_LIB_FEATURE_INCOMPAT_SUPP (EXT2_FEATURE_INCOMPAT_FILETYPE|\ EXT3_FEATURE_INCOMPAT_JOURNAL_DEV|\ EXT2_FEATURE_INCOMPAT_META_BG|\ - EXT3_FEATURE_INCOMPAT_RECOVER) + EXT3_FEATURE_INCOMPAT_RECOVER|\ + EXT4_FEATURE_INCOMPAT_FLEX_BG) #endif #define EXT2_LIB_FEATURE_RO_COMPAT_SUPP (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER|\ EXT2_FEATURE_RO_COMPAT_LARGE_FILE) diff --git a/misc/mke2fs.c b/misc/mke2fs.c index 98a4957..1bed5eb 100644 --- a/misc/mke2fs.c +++ b/misc/mke2fs.c @@ -872,7 +872,8 @@ static __u32 ok_features[3] = { EXT2_FEATURE_COMPAT_LAZY_BG, /* Compat */ EXT2_FEATURE_INCOMPAT_FILETYPE| /* Incompat */ EXT3_FEATURE_INCOMPAT_JOURNAL_DEV| - EXT2_FEATURE_INCOMPAT_META_BG, + EXT2_FEATURE_INCOMPAT_META_BG| + EXT4_FEATURE_INCOMPAT_FLEX_BG, EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER /* R/O compat */ }; diff --git a/misc/tune2fs.c b/misc/tune2fs.c index 833b994..f64e997 100644 --- a/misc/tune2fs.c +++ b/misc/tune2fs.c @@ -97,7 +97,8 @@ static void usage(void) static __u32 ok_features[3] = { EXT3_FEATURE_COMPAT_HAS_JOURNAL | EXT2_FEATURE_COMPAT_DIR_INDEX, /* Compat */ - EXT2_FEATURE_INCOMPAT_FILETYPE, /* Incompat */ + EXT2_FEATURE_INCOMPAT_FILETYPE| /* Incompat */ + EXT4_FEATURE_INCOMPAT_FLEX_BG, EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER /* R/O compat */ }; @@ -283,6 +284,7 @@ static void update_feature_set(ext2_filsys fs, char *features) { int sparse, old_sparse, filetype, old_filetype; int journal, old_journal, dxdir, old_dxdir; + int flex_bg, old_flex_bg; struct ext2_super_block *sb= fs->super; __u32 old_compat, old_incompat, old_ro_compat; @@ -294,6 +296,8 @@ static void update_feature_set(ext2_filsys fs, char *features) EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER; old_filetype = sb->s_feature_incompat & EXT2_FEATURE_INCOMPAT_FILETYPE; + old_flex_bg = sb->s_feature_incompat & + EXT4_FEATURE_INCOMPAT_FLEX_BG; old_journal = sb->s_feature_compat & EXT3_FEATURE_COMPAT_HAS_JOURNAL; old_dxdir = sb->s_feature_compat & @@ -308,6 +312,8 @@ static void update_feature_set(ext2_filsys fs, char *features) EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER; filetype = sb->s_feature_incompat & EXT2_FEATURE_INCOMPAT_FILETYPE; + flex_bg = sb->s_feature_incompat & + EXT4_FEATURE_INCOMPAT_FLEX_BG; journal = sb->s_feature_compat & EXT3_FEATURE_COMPAT_HAS_JOURNAL; dxdir = sb->s_feature_compat & @@ -352,6 +358,14 @@ static void update_feature_set(ext2_filsys fs, char *features) if (uuid_is_null((unsigned char *) sb->s_hash_seed)) uuid_generate((unsigned char *) sb->s_hash_seed); } + if (!flex_bg && old_flex_bg) { + if (ext2fs_check_desc(fs)) { + fputs(_("Clearing the flex_bg flag would " + "cause the the filesystem to be\n" + "inconsistent.\n"), stderr); + exit(1); + } + } if (sb->s_rev_level == EXT2_GOOD_OLD_REV && (sb->s_feature_compat || sb->s_feature_ro_compat || -- 1.8.3.1