|
@@ -1230,6 +1230,7 @@ enum {
|
|
|
Opt_inode_readahead_blks, Opt_journal_ioprio,
|
|
|
Opt_dioread_nolock, Opt_dioread_lock,
|
|
|
Opt_discard, Opt_nodiscard, Opt_init_itable, Opt_noinit_itable,
|
|
|
+ Opt_max_dir_size_kb,
|
|
|
};
|
|
|
|
|
|
static const match_table_t tokens = {
|
|
@@ -1303,6 +1304,7 @@ static const match_table_t tokens = {
|
|
|
{Opt_init_itable, "init_itable=%u"},
|
|
|
{Opt_init_itable, "init_itable"},
|
|
|
{Opt_noinit_itable, "noinit_itable"},
|
|
|
+ {Opt_max_dir_size_kb, "max_dir_size_kb=%u"},
|
|
|
{Opt_removed, "check=none"}, /* mount option from ext2/3 */
|
|
|
{Opt_removed, "nocheck"}, /* mount option from ext2/3 */
|
|
|
{Opt_removed, "reservation"}, /* mount option from ext2/3 */
|
|
@@ -1483,6 +1485,7 @@ static const struct mount_opts {
|
|
|
{Opt_jqfmt_vfsold, QFMT_VFS_OLD, MOPT_QFMT},
|
|
|
{Opt_jqfmt_vfsv0, QFMT_VFS_V0, MOPT_QFMT},
|
|
|
{Opt_jqfmt_vfsv1, QFMT_VFS_V1, MOPT_QFMT},
|
|
|
+ {Opt_max_dir_size_kb, 0, MOPT_GTE0},
|
|
|
{Opt_err, 0, 0}
|
|
|
};
|
|
|
|
|
@@ -1598,6 +1601,8 @@ static int handle_mount_opt(struct super_block *sb, char *opt, int token,
|
|
|
if (!args->from)
|
|
|
arg = EXT4_DEF_LI_WAIT_MULT;
|
|
|
sbi->s_li_wait_mult = arg;
|
|
|
+ } else if (token == Opt_max_dir_size_kb) {
|
|
|
+ sbi->s_max_dir_size_kb = arg;
|
|
|
} else if (token == Opt_stripe) {
|
|
|
sbi->s_stripe = arg;
|
|
|
} else if (m->flags & MOPT_DATAJ) {
|
|
@@ -1829,6 +1834,8 @@ static int _ext4_show_options(struct seq_file *seq, struct super_block *sb,
|
|
|
if (nodefs || (test_opt(sb, INIT_INODE_TABLE) &&
|
|
|
(sbi->s_li_wait_mult != EXT4_DEF_LI_WAIT_MULT)))
|
|
|
SEQ_OPTS_PRINT("init_itable=%u", sbi->s_li_wait_mult);
|
|
|
+ if (nodefs || sbi->s_max_dir_size_kb)
|
|
|
+ SEQ_OPTS_PRINT("max_dir_size_kb=%u", sbi->s_max_dir_size_kb);
|
|
|
|
|
|
ext4_show_quota_options(seq, sb);
|
|
|
return 0;
|