Whamcloud - gitweb
Add support for manipulating large_file feature in mke2fs and tune2fs
authorTheodore Ts'o <tytso@mit.edu>
Wed, 27 Feb 2008 20:01:19 +0000 (15:01 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Wed, 27 Feb 2008 20:01:19 +0000 (15:01 -0500)
Previously we just let the kernel and e2fsck do this automatically,
but e2fsck will no longer automatically clear the large_file feature.
It still isn't really necessary to worry about this feature flag
explicitly, but some users seem to care.

Addresses-Red-Hat-Bugzilla: #258381

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
misc/mke2fs.8.in
misc/mke2fs.c
misc/tune2fs.8.in
misc/tune2fs.c

index 65c42bf..6b394a5 100644 (file)
@@ -415,6 +415,10 @@ prefix the feature name with a  caret ('^') character.  The
 pseudo-filesystem feature "none" will clear all filesystem features.
 .RS 1.2i
 .TP
+.B large_file
+Filesystem can contain files that are greater than 2GB.  (Modern kernels
+set this feature automatically when a file > 2GB is created.)
+.TP
 .B dir_index
 Use hashed b-trees to speed up lookups in large directories.
 .TP
index cfc8116..e16c5f0 100644 (file)
@@ -897,15 +897,19 @@ static void parse_extended_opts(struct ext2_super_block *param,
 }      
 
 static __u32 ok_features[3] = {
+       /* Compat */
        EXT3_FEATURE_COMPAT_HAS_JOURNAL |
                EXT2_FEATURE_COMPAT_RESIZE_INODE |
                EXT2_FEATURE_COMPAT_DIR_INDEX |
                EXT2_FEATURE_COMPAT_LAZY_BG |
-               EXT2_FEATURE_COMPAT_EXT_ATTR,   /* Compat */
-       EXT2_FEATURE_INCOMPAT_FILETYPE|         /* Incompat */
+               EXT2_FEATURE_COMPAT_EXT_ATTR,
+       /* Incompat */
+       EXT2_FEATURE_INCOMPAT_FILETYPE|
                EXT3_FEATURE_INCOMPAT_JOURNAL_DEV|
                EXT2_FEATURE_INCOMPAT_META_BG,
-       EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER     /* R/O compat */
+       /* R/O compat */
+       EXT2_FEATURE_RO_COMPAT_LARGE_FILE|
+               EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER
 };
 
 
index 2a8c42b..b37e99d 100644 (file)
@@ -415,6 +415,10 @@ The following filesystem features can be set or cleared using
 .BR tune2fs :
 .RS 1.2i
 .TP
+.B large_file
+Filesystem can contain files that are greater than 2GB.  (Modern kernels
+set this feature automatically when a file > 2GB is created.)
+.TP
 .B dir_index
 Use hashed b-trees to speed up lookups in large directories.
 .TP
index 4529e24..184b5d6 100644 (file)
@@ -108,18 +108,26 @@ static void usage(void)
 }
 
 static __u32 ok_features[3] = {
+       /* Compat */
        EXT3_FEATURE_COMPAT_HAS_JOURNAL |
-               EXT2_FEATURE_COMPAT_DIR_INDEX,  /* Compat */
-       EXT2_FEATURE_INCOMPAT_FILETYPE,         /* Incompat */
-       EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER     /* R/O compat */
+               EXT2_FEATURE_COMPAT_DIR_INDEX,
+       /* Incompat */
+       EXT2_FEATURE_INCOMPAT_FILETYPE,
+       /* R/O compat */
+       EXT2_FEATURE_RO_COMPAT_LARGE_FILE |
+               EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER
 };
 
 static __u32 clear_ok_features[3] = {
+       /* Compat */
        EXT3_FEATURE_COMPAT_HAS_JOURNAL |
                EXT2_FEATURE_COMPAT_RESIZE_INODE |
-               EXT2_FEATURE_COMPAT_DIR_INDEX,  /* Compat */
-       EXT2_FEATURE_INCOMPAT_FILETYPE,         /* Incompat */
-       EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER     /* R/O compat */
+               EXT2_FEATURE_COMPAT_DIR_INDEX,
+       /* Incompat */
+       EXT2_FEATURE_INCOMPAT_FILETYPE,
+       /* R/O compat */
+       EXT2_FEATURE_RO_COMPAT_LARGE_FILE |
+               EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER
 };
 
 /*
@@ -392,7 +400,9 @@ static void update_feature_set(ext2_filsys fs, char *features)
            FEATURE_CHANGED(E2P_FEATURE_INCOMPAT,
                            EXT2_FEATURE_INCOMPAT_FILETYPE) ||
            FEATURE_CHANGED(E2P_FEATURE_COMPAT,
-                           EXT2_FEATURE_COMPAT_RESIZE_INODE)) {
+                           EXT2_FEATURE_COMPAT_RESIZE_INODE) ||
+           FEATURE_OFF(E2P_FEATURE_RO_INCOMPAT,
+                       EXT2_FEATURE_RO_COMPAT_LARGE_FILE)) {
                sb->s_state &= ~EXT2_VALID_FS;
                printf("\n%s\n", _(please_fsck));
        }