]> git.ipfire.org Git - thirdparty/e2fsprogs.git/commitdiff
This patch adds basic flex_bg support to the e2fsprogs-interim branch.
authorJose R. Santos <jrs@us.ibm.com>
Fri, 29 Feb 2008 14:37:40 +0000 (09:37 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Fri, 29 Feb 2008 14:38:04 +0000 (09:38 -0500)
Signed-off-by: Jose R. Santos <jrs@us.ibm.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
e2fsck/super.c
lib/e2p/feature.c
lib/ext2fs/check_desc.c
lib/ext2fs/ext2_fs.h
lib/ext2fs/ext2fs.h
misc/mke2fs.c
misc/tune2fs.c

index 0b17c486392527ab46337c68f9d64e3744bcf73e..581e8fe74084cb08ddc0b1f97a7bfb946aa901bf 100644 (file)
@@ -584,8 +584,11 @@ void check_super_block(e2fsck_t ctx)
        for (i = 0, gd=fs->group_desc; i < fs->group_desc_count; i++, gd++) {
                pctx.group = i;
 
-               first_block = ext2fs_group_first_block(fs, i);
-               last_block = ext2fs_group_last_block(fs, i);
+               if (!EXT2_HAS_INCOMPAT_FEATURE(fs->super,
+                                              EXT4_FEATURE_INCOMPAT_FLEX_BG)) {
+                       first_block = ext2fs_group_first_block(fs, i);
+                       last_block = ext2fs_group_last_block(fs, i);
+               }
 
                if ((gd->bg_block_bitmap < first_block) ||
                    (gd->bg_block_bitmap > last_block)) {
index f111ddd4f1b740923a12caa30558fb11dcd4851b..a9791b4245b971f095e5e6edb75828abfaa4eed4 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"},
        {       E2P_FEATURE_INCOMPAT, EXT4_FEATURE_INCOMPAT_MMP,
                        "mmp" },
        {       0, 0, 0 },
index 146f9e59214a9631572f9f6d94706c2710ee38e5..900b179029362cec3f2b6ec473a3b3d9064f92f6 100644 (file)
@@ -33,13 +33,16 @@ errcode_t ext2fs_check_desc(ext2_filsys fs)
 {
        dgrp_t i;
        blk_t first_block = fs->super->s_first_data_block;
-       blk_t last_block;
+       blk_t last_block = fs->super->s_blocks_count-1;
 
        EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
 
        for (i = 0; i < fs->group_desc_count; i++) {
-               first_block = ext2fs_group_first_block(fs, i);
-               last_block = ext2fs_group_last_block(fs, i);
+               if (!EXT2_HAS_INCOMPAT_FEATURE(fs->super,
+                                              EXT4_FEATURE_INCOMPAT_FLEX_BG)) {
+                       first_block = ext2fs_group_first_block(fs, i);
+                       last_block = ext2fs_group_last_block(fs, i);
+               }
 
                /*
                 * Check to make sure block bitmap for group is
index 9218e42285be6760e398de55a7c20677edeb5bcd..412b49b7de41f1533ce8d292bd877de3c40cb8a0 100644 (file)
@@ -661,6 +661,7 @@ struct ext2_super_block {
 #define EXT3_FEATURE_INCOMPAT_EXTENTS          0x0040
 #define EXT4_FEATURE_INCOMPAT_64BIT            0x0080
 #define EXT4_FEATURE_INCOMPAT_MMP              0x0100
+#define EXT4_FEATURE_INCOMPAT_FLEX_BG          0x0200
 
 
 #define EXT2_FEATURE_COMPAT_SUPP       0
index 1d86fa179605bd9759bc63f1eb06798c00238c4f..b34aff1ccf9bf76ec98766e7caf87e61c3956007 100644 (file)
@@ -482,14 +482,16 @@ typedef struct ext2_icount *ext2_icount_t;
                                         EXT2_FEATURE_INCOMPAT_META_BG|\
                                         EXT3_FEATURE_INCOMPAT_EXTENTS|\
                                         EXT3_FEATURE_INCOMPAT_RECOVER|\
-                                        EXT4_FEATURE_INCOMPAT_MMP)
+                                        EXT4_FEATURE_INCOMPAT_MMP|\
+                                        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_EXTENTS|\
                                         EXT3_FEATURE_INCOMPAT_RECOVER|\
-                                        EXT4_FEATURE_INCOMPAT_MMP)
+                                        EXT4_FEATURE_INCOMPAT_MMP|\
+                                        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 8210c3b2fe01a21d195125d122c0cd466557cc87..0184af735e32778677082191b73efe51000e9672 100644 (file)
@@ -922,7 +922,8 @@ static __u32 ok_features[3] = {
        EXT2_FEATURE_INCOMPAT_FILETYPE|         /* Incompat */
                EXT3_FEATURE_INCOMPAT_JOURNAL_DEV|
                EXT2_FEATURE_INCOMPAT_META_BG|
-               EXT4_FEATURE_INCOMPAT_MMP,
+               EXT4_FEATURE_INCOMPAT_MMP|
+               EXT4_FEATURE_INCOMPAT_FLEX_BG,
        EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER|    /* R/O compat */
                EXT4_FEATURE_RO_COMPAT_GDT_CSUM
 };
index fad4812d61ae0d07c02d5dd84a647e5b89cde38b..d37ceb1ff70ab75e34a9f93941630a51cc658617 100644 (file)
@@ -303,6 +303,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, uninit;
+       int flex_bg, old_flex_bg;
        int mmp, old_mmp;
        struct ext2_super_block *sb= fs->super;
        int dir_nlink, old_dir_nlink;
@@ -319,6 +320,8 @@ static void update_feature_set(ext2_filsys fs, char *features)
                EXT4_FEATURE_RO_COMPAT_DIR_NLINK;
        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 &
@@ -339,6 +342,8 @@ static void update_feature_set(ext2_filsys fs, char *features)
                EXT4_FEATURE_RO_COMPAT_DIR_NLINK;
        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 &
@@ -407,6 +412,14 @@ static void update_feature_set(ext2_filsys fs, char *features)
                         "update interval has been set to %d seconds.\n"),
                       sb->s_mmp_update_interval);
        }
+       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 (old_mmp && !mmp) {
                blk_t mmp_block;