aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTyson Nottingham <tgnottingham@gmail.com>2018-03-30 00:51:10 -0400
committerTheodore Ts'o <tytso@mit.edu>2018-03-30 00:51:10 -0400
commit68afa7e0836263e28ebf272e56a110a56ffdabb6 (patch)
tree6330661573157eb84d78334e3dcfd116364a4c75
parentbc1420ae56266fa2c5a8e452d55f744ca98fe42f (diff)
ext4: show more binary mount options in procfs
Previously, /proc/fs/ext4/<dev>/options would only show binary options if they were set (1 in the options bit mask). E.g. it would show "grpid" if it was set, but it would not show "nogrpid" if grpid was not set. This seems sensible, but when an option is absent from the file, it can be hard for the unfamiliar to know what is being used. E.g. if there isn't a (no)grpid entry, nogrpid is in effect. But if there isn't a (no)auto_da_alloc entry, auto_da_alloc is in effect. If there isn't a (minixdf|bsddf) entry, it turns out bsddf is in effect. It all depends on how the option is implemented. It's clearer to be explicit, so print the corresponding option regardless of whether it means a 1 or a 0 in the bit mask. Note that options which do not have an explicit disable option aren't indicated as being disabled even with this change (e.g. dax). Signed-off-by: Tyson Nottingham <tgnottingham@gmail.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
-rw-r--r--fs/ext4/super.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index edcfe6956eba..2376ac09e013 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -2021,7 +2021,7 @@ static int _ext4_show_options(struct seq_file *seq, struct super_block *sb,
2021{ 2021{
2022 struct ext4_sb_info *sbi = EXT4_SB(sb); 2022 struct ext4_sb_info *sbi = EXT4_SB(sb);
2023 struct ext4_super_block *es = sbi->s_es; 2023 struct ext4_super_block *es = sbi->s_es;
2024 int def_errors, def_mount_opt = nodefs ? 0 : sbi->s_def_mount_opt; 2024 int def_errors, def_mount_opt = sbi->s_def_mount_opt;
2025 const struct mount_opts *m; 2025 const struct mount_opts *m;
2026 char sep = nodefs ? '\n' : ','; 2026 char sep = nodefs ? '\n' : ',';
2027 2027
@@ -2036,7 +2036,7 @@ static int _ext4_show_options(struct seq_file *seq, struct super_block *sb,
2036 if (((m->flags & (MOPT_SET|MOPT_CLEAR)) == 0) || 2036 if (((m->flags & (MOPT_SET|MOPT_CLEAR)) == 0) ||
2037 (m->flags & MOPT_CLEAR_ERR)) 2037 (m->flags & MOPT_CLEAR_ERR))
2038 continue; 2038 continue;
2039 if (!(m->mount_opt & (sbi->s_mount_opt ^ def_mount_opt))) 2039 if (!nodefs && !(m->mount_opt & (sbi->s_mount_opt ^ def_mount_opt)))
2040 continue; /* skip if same as the default */ 2040 continue; /* skip if same as the default */
2041 if ((want_set && 2041 if ((want_set &&
2042 (sbi->s_mount_opt & m->mount_opt) != m->mount_opt) || 2042 (sbi->s_mount_opt & m->mount_opt) != m->mount_opt) ||
@@ -2070,7 +2070,8 @@ static int _ext4_show_options(struct seq_file *seq, struct super_block *sb,
2070 SEQ_OPTS_PUTS("i_version"); 2070 SEQ_OPTS_PUTS("i_version");
2071 if (nodefs || sbi->s_stripe) 2071 if (nodefs || sbi->s_stripe)
2072 SEQ_OPTS_PRINT("stripe=%lu", sbi->s_stripe); 2072 SEQ_OPTS_PRINT("stripe=%lu", sbi->s_stripe);
2073 if (EXT4_MOUNT_DATA_FLAGS & (sbi->s_mount_opt ^ def_mount_opt)) { 2073 if (nodefs || EXT4_MOUNT_DATA_FLAGS &
2074 (sbi->s_mount_opt ^ def_mount_opt)) {
2074 if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA) 2075 if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA)
2075 SEQ_OPTS_PUTS("data=journal"); 2076 SEQ_OPTS_PUTS("data=journal");
2076 else if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_ORDERED_DATA) 2077 else if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_ORDERED_DATA)