+diff -urpN linux-stage.orig/fs/ext4/super.c linux-stage/fs/ext4/super.c
+--- linux-stage.orig/fs/ext4/super.c 2013-05-13 10:29:34.125478791 -0400
++++ linux-stage/fs/ext4/super.c 2013-05-13 10:31:59.800359005 -0400
+@@ -1264,8 +1264,8 @@ enum {
+ Opt_mballoc, Opt_bigendian_extents, Opt_force_over_128tb,
+ Opt_extents, Opt_noextents,
+ Opt_no_mbcache,
+- Opt_discard, Opt_nodiscard,
+- Opt_init_inode_table, Opt_noinit_inode_table,
++ Opt_discard, Opt_nodiscard, Opt_init_inode_table, Opt_noinit_inode_table,
++ Opt_max_dir_size_kb,
+ };
+
+ static const match_table_t tokens = {
+@@ -1346,6 +1346,7 @@ static const match_table_t tokens = {
+ {Opt_init_inode_table, "init_itable=%u"},
+ {Opt_init_inode_table, "init_itable"},
+ {Opt_noinit_inode_table, "noinit_itable"},
++ {Opt_max_dir_size_kb, "max_dir_size_kb=%u"},
+ {Opt_err, NULL},
+ };
+
+@@ -1732,6 +1733,13 @@ set_qf_format:
+ case Opt_nodelalloc:
+ clear_opt(sbi->s_mount_opt, DELALLOC);
+ break;
++ case Opt_max_dir_size_kb:
++ if (match_int(&args[0], &option))
++ return 0;
++ if (option < 0)
++ return 0;
++ sbi->s_max_dir_size = option * 1024;
++ break;
+ case Opt_stripe:
+ if (match_int(&args[0], &option))
+ return 0;