@@ -731,12 +731,10 @@ struct ext4_inode_info {
* Mount flags
*/
#define EXT4_MOUNT_OLDALLOC 0x00002 /* Don't use the new Orlov allocator */
-#define EXT4_MOUNT_GRPID 0x00004 /* Create files with directory's group */
#define EXT4_MOUNT_DEBUG 0x00008 /* Some debugging messages */
#define EXT4_MOUNT_ERRORS_CONT 0x00010 /* Continue on errors */
#define EXT4_MOUNT_ERRORS_RO 0x00020 /* Remount fs ro on errors */
#define EXT4_MOUNT_ERRORS_PANIC 0x00040 /* Panic on errors */
-#define EXT4_MOUNT_MINIX_DF 0x00080 /* Mimics the Minix statfs */
#define EXT4_MOUNT_NOLOAD 0x00100 /* Don't use existing journal*/
#define EXT4_MOUNT_DATA_FLAGS 0x00C00 /* Mode for data writes: */
#define EXT4_MOUNT_JOURNAL_DATA 0x00400 /* Write data to journal */
@@ -1185,6 +1183,8 @@ static inline void ext4_clear_inode_state(struct inode *inode, int bit)
#define EXT4_DEFM_JMODE_DATA 0x0020
#define EXT4_DEFM_JMODE_ORDERED 0x0040
#define EXT4_DEFM_JMODE_WBACK 0x0060
+/* Deprecated default mount options mask */
+#define EXT4_DEFM_DEPRECATED EXT4_DEFM_BSDGROUPS
/*
* Default journal batch times
@@ -986,9 +986,7 @@ got:
}
inode->i_uid = current_fsuid();
- if (test_opt(sb, GRPID))
- inode->i_gid = dir->i_gid;
- else if (dir->i_mode & S_ISGID) {
+ if (dir->i_mode & S_ISGID) {
inode->i_gid = dir->i_gid;
if (S_ISDIR(mode))
mode |= S_ISGID;
@@ -823,12 +823,6 @@ static int ext4_show_options(struct seq_file *seq, struct vfsmount *vfs)
if (sbi->s_sb_block != 1)
seq_printf(seq, ",sb=%llu", sbi->s_sb_block);
- if (test_opt(sb, MINIX_DF))
- seq_puts(seq, ",minixdf");
- if (test_opt(sb, GRPID) && !(def_mount_opts & EXT4_DEFM_BSDGROUPS))
- seq_puts(seq, ",grpid");
- if (!test_opt(sb, GRPID) && (def_mount_opts & EXT4_DEFM_BSDGROUPS))
- seq_puts(seq, ",nogrpid");
if (sbi->s_resuid != EXT4_DEF_RESUID ||
le16_to_cpu(es->s_def_resuid) != EXT4_DEF_RESUID) {
seq_printf(seq, ",resuid=%u", sbi->s_resuid);
@@ -1096,7 +1090,6 @@ static const struct export_operations ext4_export_ops = {
};
enum {
- Opt_bsd_df, Opt_minix_df, Opt_grpid, Opt_nogrpid,
Opt_resgid, Opt_resuid, Opt_sb, Opt_err_cont, Opt_err_panic, Opt_err_ro,
Opt_nouid32, Opt_debug, Opt_oldalloc, Opt_orlov,
Opt_user_xattr, Opt_nouser_xattr, Opt_acl, Opt_noacl,
@@ -1114,16 +1107,16 @@ enum {
Opt_block_validity, Opt_noblock_validity,
Opt_inode_readahead_blks, Opt_journal_ioprio,
Opt_dioread_nolock, Opt_dioread_lock,
- Opt_discard, Opt_nodiscard,
+ Opt_discard, Opt_nodiscard, Opt_deprecated,
};
static const match_table_t tokens = {
- {Opt_bsd_df, "bsddf"},
- {Opt_minix_df, "minixdf"},
- {Opt_grpid, "grpid"},
- {Opt_grpid, "bsdgroups"},
- {Opt_nogrpid, "nogrpid"},
- {Opt_nogrpid, "sysvgroups"},
+ {Opt_deprecated, "bsddf"},
+ {Opt_deprecated, "minixdf"},
+ {Opt_deprecated, "grpid"},
+ {Opt_deprecated, "bsdgroups"},
+ {Opt_deprecated, "nogrpid"},
+ {Opt_deprecated, "sysvgroups"},
{Opt_resgid, "resgid=%u"},
{Opt_resuid, "resuid=%u"},
{Opt_sb, "sb=%u"},
@@ -1188,6 +1181,18 @@ static const match_table_t tokens = {
{Opt_err, NULL},
};
+static const match_table_t default_mountopt = {
+ {EXT4_DEFM_DEBUG, "debug"},
+ {EXT4_DEFM_BSDGROUPS, "bsdgroups"},
+ {EXT4_DEFM_XATTR_USER, "user_xattr"},
+ {EXT4_DEFM_ACL, "acl"},
+ {EXT4_DEFM_UID16, "uid16"},
+ {EXT4_DEFM_JMODE_WBACK, "journal_data_writeback"},
+ {EXT4_DEFM_JMODE_DATA, "journal_data"},
+ {EXT4_DEFM_JMODE_ORDERED, "journal_data_ordered"},
+ {0, NULL},
+};
+
static ext4_fsblk_t get_sb_block(void **data)
{
ext4_fsblk_t sb_block;
@@ -1238,18 +1243,6 @@ static int parse_options(char *options, struct super_block *sb,
token = match_token(p, tokens, args);
switch (token) {
- case Opt_bsd_df:
- clear_opt(sbi->s_mount_opt, MINIX_DF);
- break;
- case Opt_minix_df:
- set_opt(sbi->s_mount_opt, MINIX_DF);
- break;
- case Opt_grpid:
- set_opt(sbi->s_mount_opt, GRPID);
- break;
- case Opt_nogrpid:
- clear_opt(sbi->s_mount_opt, GRPID);
- break;
case Opt_resuid:
if (match_int(&args[0], &option))
return 0;
@@ -1622,6 +1615,12 @@ set_qf_format:
case Opt_dioread_lock:
clear_opt(sbi->s_mount_opt, DIOREAD_NOLOCK);
break;
+ case Opt_deprecated:
+ ext4_msg(sb, KERN_ERR,
+ "Deprecated mount option \"%s\". "
+ "Please contact linux-ext4@vger.kernel.org if "
+ "you are still using it.", p);
+ return 0;
default:
ext4_msg(sb, KERN_ERR,
"Unrecognized mount option \"%s\" "
@@ -2358,7 +2357,42 @@ static int ext4_feature_set_ok(struct super_block *sb, int readonly)
}
return 1;
}
+static int handle_deprecated_defmopt(struct super_block *sb, unsigned int opt)
+{
+ int first = 1;
+ /*
+ * When deprecated options are found they are not cleared from
+ * super block by default. Just print error message and let
+ * user clear it manually.
+ */
+ printk(KERN_ERR "EXT4-fs (%s) Deprecated default mount options:",
+ sb->s_id);
+ /*
+ * It is impossible to use simple bit traversing because,
+ * some options use shared bits.
+ */
+ opt &= EXT4_DEFM_DEPRECATED;
+ while (opt) {
+ const struct match_token *mt = default_mountopt;
+ while (mt->pattern != NULL) {
+ if ((opt & mt->token) == mt->token)
+ break;
+ mt++;
+ }
+ if (mt->pattern == NULL) {
+ printk("%s unknown", !first ? "," : "");
+ break;
+ } else {
+ printk("%s %s", !first ? "," : "", mt->pattern);
+ opt &= ~mt->token;
+ }
+ first = 0;
+ }
+ printk(". Please use tune2fs to disable it, or contact "
+ "linux-ext4@vger.kernel.org if you are still need it.");
+ return 1;
+}
static int ext4_fill_super(struct super_block *sb, void *data, int silent)
__releases(kernel_lock)
__acquires(kernel_lock)
@@ -2443,10 +2477,12 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
/* Set defaults before we parse the mount options */
def_mount_opts = le32_to_cpu(es->s_default_mount_opts);
+ if (def_mount_opts & EXT4_DEFM_DEPRECATED) {
+ if (handle_deprecated_defmopt(sb, def_mount_opts))
+ goto failed_mount;
+ }
if (def_mount_opts & EXT4_DEFM_DEBUG)
set_opt(sbi->s_mount_opt, DEBUG);
- if (def_mount_opts & EXT4_DEFM_BSDGROUPS)
- set_opt(sbi->s_mount_opt, GRPID);
if (def_mount_opts & EXT4_DEFM_UID16)
set_opt(sbi->s_mount_opt, NO_UID32);
#ifdef CONFIG_EXT4_FS_XATTR
@@ -3668,9 +3704,7 @@ static int ext4_statfs(struct dentry *dentry, struct kstatfs *buf)
struct ext4_super_block *es = sbi->s_es;
u64 fsid;
- if (test_opt(sb, MINIX_DF)) {
- sbi->s_overhead_last = 0;
- } else if (sbi->s_blocks_last != ext4_blocks_count(es)) {
+ if (sbi->s_blocks_last != ext4_blocks_count(es)) {
ext4_group_t i, ngroups = ext4_get_groups_count(sb);
ext4_fsblk_t overhead = 0;