OSDN Git Service

Enable FLEX_BG feature support
authorJose R. Santos <jrs@us.ibm.com>
Tue, 14 Aug 2007 04:32:57 +0000 (23:32 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Sun, 4 Nov 2007 00:40:56 +0000 (20:40 -0400)
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 <jrs@us.ibm.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
--

 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
lib/ext2fs/ext2fs.h
misc/mke2fs.c
misc/tune2fs.c

index fe7e65a..4bf5630 100644 (file)
@@ -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 },
 };
 
index d691c1b..49bac52 100644 (file)
@@ -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)
index 98a4957..1bed5eb 100644 (file)
@@ -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 */
 };
 
index 833b994..f64e997 100644 (file)
@@ -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 ||