]> git.ipfire.org Git - thirdparty/e2fsprogs.git/commitdiff
tune2fs, debugfs, libext2fs: Add support for ext4 default mount options
authorTheodore Ts'o <tytso@mit.edu>
Sat, 18 Sep 2010 23:38:22 +0000 (19:38 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Sat, 18 Sep 2010 23:38:22 +0000 (19:38 -0400)
Add support for 2.6.35's new default mount options which can be
specified in the superblock.

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
debugfs/set_fields.c
lib/e2p/ls.c
lib/e2p/mntopts.c
lib/ext2fs/ext2_fs.h
lib/ext2fs/tst_super_size.c
misc/tune2fs.8.in
misc/tune2fs.c

index 6e71fe8ad877748cd82d3792a8db6ad5e097e1cc..db1a99b7902ff645f852fbef7c4fe13f9058e56d 100644 (file)
@@ -139,6 +139,7 @@ static struct field_set_info super_fields[] = {
        { "snapshot_r_blocks_count", &set_sb.s_snapshot_r_blocks_count, 8, 
          parse_uint },
        { "snapshot_list", &set_sb.s_snapshot_list, 4, parse_uint },
+       { "mount_opts",  &set_sb.s_mount_opts, 64, parse_string },
        { 0, 0, 0, 0 }
 };
 
index f2a04ffa559f713dfc8c73508a855f2e0d272d5a..5ef8098886b2a591bf9a249a9271708cf1c2052b 100644 (file)
@@ -211,6 +211,8 @@ void list_super2(struct ext2_super_block * sb, FILE *f)
        print_features(sb, f);
        print_super_flags(sb, f);
        print_mntopts(sb, f);
+       if (sb->s_mount_opts[0])
+               fprintf(f, "Mount options:            %s\n", sb->s_mount_opts);
        fprintf(f, "Filesystem state:        ");
        print_fs_state (f, sb->s_state);
        fprintf(f, "\n");
index bffcb418b560e4731b8e07d1fe9e8d2043c808b8..ebab7fdf65ee72721536bc986458f455ba3981e1 100644 (file)
@@ -31,6 +31,10 @@ static struct mntopt mntopt_list[] = {
        { EXT3_DEFM_JMODE_DATA, "journal_data" },
        { EXT3_DEFM_JMODE_ORDERED, "journal_data_ordered" },
        { EXT3_DEFM_JMODE_WBACK, "journal_data_writeback" },
+       { EXT4_DEFM_NOBARRIER,  "nobarrier" },
+       { EXT4_DEFM_BLOCK_VALIDITY, "block_validity" },
+       { EXT4_DEFM_DISCARD,    "discard"},
+       { EXT4_DEFM_NODELALLOC, "nodelalloc"},
        { 0, 0 },
 };
 
index a2bca3d621db9894c35d53b13ae31cfac40cc4a5..afd33a9355407385752ca4ed53897b66db1f6e81 100644 (file)
@@ -612,8 +612,9 @@ struct ext2_super_block {
        __u32   s_last_error_line;      /* line number where error happened */
        __u64   s_last_error_block;     /* block involved of last error */
        __u8    s_last_error_func[32];  /* function where the error happened */
-#define EXT4_S_ERR_END ext4_offsetof(struct ext2_super_block, s_error_count)
-       __u32   s_reserved[128];        /* Padding to the end of the block */
+#define EXT4_S_ERR_END ext4_offsetof(struct ext2_super_block, s_mount_opts)
+       __u8    s_mount_opts[64];
+       __u32   s_reserved[112];        /* Padding to the end of the block */
 };
 
 #define EXT4_S_ERR_LEN (EXT4_S_ERR_END - EXT4_S_ERR_START)
@@ -710,6 +711,10 @@ struct ext2_super_block {
 #define EXT3_DEFM_JMODE_DATA   0x0020
 #define EXT3_DEFM_JMODE_ORDERED        0x0040
 #define EXT3_DEFM_JMODE_WBACK  0x0060
+#define EXT4_DEFM_NOBARRIER    0x0100
+#define EXT4_DEFM_BLOCK_VALIDITY 0x0200
+#define EXT4_DEFM_DISCARD      0x0400
+#define EXT4_DEFM_NODELALLOC   0x0800
 
 /*
  * Structure of a directory entry
index 606479ca0bb840dc0f2192167fea596325f76785..eb9114f1515d7d43b80e159d845589db87cd8ab1 100644 (file)
@@ -122,6 +122,7 @@ void check_superblock_fields()
        check_field(s_last_error_line);
        check_field(s_last_error_block);
        check_field(s_last_error_func);
+       check_field(s_mount_opts);
        check_field(s_reserved);
        printf("Ending offset is %d\n\n", cur_offset);
 #endif
index 62934f73bfed8676532d632cb21cf6cd5315fd83..dffe76dad242dcfa6a74a0dff4a5ce2746a76c08 100644 (file)
@@ -187,6 +187,26 @@ directories.  Valid algorithms accepted are:
 and
 .IR tea .
 .TP
+.BI mount_opts= mount_option_string
+Set a set of default mount options which will be used when the file
+system is mounted.  Unlike the bitmask-based default mount options which
+can be specified with the
+.B -o
+option,
+.I mount_option_string
+is an arbitrary string with a maximum length of 63 bytes, which is
+stored in the superblock.
+.IP
+The ext4 file system driver will first apply
+the bitmask-based default options, and then parse the
+.IR mount_option_string ,
+before parsing the mount options passed from the
+.BR mount (8)
+program.
+.IP
+This superblock setting is only honored in 2.6.35+ kernels;
+and not at all by the ext2 and ext3 file system drivers.
+.TP
 .B test_fs
 Set a flag in the filesystem superblock indicating that it may be
 mounted using experimental kernel code, such as the ext4dev filesystem.
@@ -419,6 +439,35 @@ When the filesystem is mounted with journalling enabled, data may be
 written into the main filesystem after its metadata has been committed
 to the journal.  This may increase throughput, however, it may allow old
 data to appear in files after a crash and journal recovery.
+.TP
+.B nobarrier
+The file system will be mounted with barrier operations in the journal
+disabled.  (This option is currently only supported by the ext4 file
+system driver in 2.6.35+ kernels.)
+.TP
+.B block_validity
+The file system will be mounted with the block_validity option enabled,
+which causes extra checks to be performed after reading or writing from
+the file system.  This prevents corrupted metadata blocks from causing
+file system damage by overwriting parts of the inode table or block
+group descriptors.  This comes at the cost of increased memory and CPU
+overhead, so it is enabled only for debugging purposes.  (This option is
+currently only supported by the ext4 file system driver in 2.6.35+
+kernels.)
+.TP
+.B discard
+The file system will be mouinted with the discard mount option.  This will
+cause the file system driver to attempt to use the trim/discard feature
+of some storage devices (such as SSD's and thin-provisioned drives
+available in some enterprise storage arrays) to inform the storage
+device that blocks belonging to deleted files can be reused for other
+purposes.  (This option is currently only supported by the ext4 file
+system driver in 2.6.35+ kernels.)
+.TP
+.B nodelalloc
+The file system will be mounted with the nodelalloc mount option.  This
+will disable the delayed allocation feature.  (This option is currently
+only supported by the ext4 file system driver in 2.6.35+ kernels.)
 .RE
 .TP
 .BR \-O " [^]\fIfeature\fR[,...]"
index 4be854216ba99efaa1cf855b99f68092d9fa6e5b..e5722a5a542b13d557162dd1b34c7546b7c264d3 100644 (file)
@@ -979,6 +979,18 @@ static void parse_extended_opts(ext2_filsys fs, const char *opts)
                                 "to %s (%d)\n"),
                               arg, hash_alg);
                        ext2fs_mark_super_dirty(fs);
+               } else if (strcmp(token, "mount-options")) {
+                       if (!arg) {
+                               r_usage++;
+                               continue;
+                       }
+                       if (strlen(arg) >= sizeof(fs->super->s_mount_opts)) {
+                               fprintf(stderr,
+                                       "Extended mount options too long\n");
+                               continue;
+                       }
+                       strcpy(fs->super->s_mount_opts, arg);
+                       ext2fs_mark_super_dirty(fs);
                } else
                        r_usage++;
        }