return DT_UNKNOWN;
- return (ext4_filetype_table[filetype]);
-+ if (!EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_DIRDATA))
++ if (!test_opt(sb, DIRDATA))
+ return (ext4_filetype_table[fl_index]);
+
+ return (ext4_filetype_table[fl_index]) |
struct fname *fname, *new_fn;
struct dir_private_info *info;
int len;
-+ int extra_data = 1;
++ int extra_data = 0;
info = (struct dir_private_info *) dir_file->private_data;
p = &info->root.rb_node;
+ if (dirent->file_type & EXT4_DIRENT_LUFID)
+ extra_data = ext4_get_dirent_data_len(dirent);
+
-+ len = sizeof(struct fname) + dirent->name_len + extra_data;
++ len = sizeof(struct fname) + dirent->name_len + extra_data + 1;
+
new_fn = kzalloc(len, GFP_KERNEL);
if (!new_fn)
new_fn->name[dirent->name_len] = 0;
while (*p) {
---- a/fs/ext4/ext4.h
-+++ b/fs/ext4/ext4.h
-@@ -1294,6 +1294,7 @@ EXT4_INODE_BIT_FNS(state, state_flags)
+Index: linux-stage/fs/ext4/ext4.h
+===================================================================
+--- linux-stage.orig/fs/ext4/ext4.h
++++ linux-stage/fs/ext4/ext4.h
+@@ -843,6 +843,7 @@ struct ext4_inode_info {
+ #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_DIRDATA 0x00200 /* Data in directory entries*/
+ #define EXT4_MOUNT_DATA_FLAGS 0x00C00 /* Mode for data writes: */
+ #define EXT4_MOUNT_JOURNAL_DATA 0x00400 /* Write data to journal */
+ #define EXT4_MOUNT_ORDERED_DATA 0x00800 /* Flush data before commit */
+@@ -1294,6 +1295,7 @@ EXT4_INODE_BIT_FNS(state, state_flags)
#define EXT4_FEATURE_INCOMPAT_64BIT 0x0080
#define EXT4_FEATURE_INCOMPAT_MMP 0x0100
#define EXT4_FEATURE_INCOMPAT_FLEX_BG 0x0200
!(bh = ext4_bread(NULL, inode, 0, 0, &err))) {
if (err)
ext4_error(inode->i_sb,
+diff -ur a/fs/ext4/super.c b/fs/ext4/super.c
+--- a/fs/ext4/super.c 2014-01-02 11:40:34.000000000 -0500
++++ b/fs/ext4/super.c 2014-01-02 11:46:45.000000000 -0500
+@@ -1191,7 +1191,7 @@
+ Opt_usrjquota, Opt_grpjquota, Opt_offusrjquota, Opt_offgrpjquota,
+ Opt_jqfmt_vfsold, Opt_jqfmt_vfsv0, Opt_jqfmt_vfsv1, Opt_quota,
+ Opt_noquota, Opt_ignore, Opt_barrier, Opt_nobarrier, Opt_err,
+- Opt_iopen, Opt_noiopen, Opt_iopen_nopriv,
++ Opt_iopen, Opt_noiopen, Opt_iopen_nopriv, Opt_dirdata,
+ Opt_resize, Opt_usrquota, Opt_grpquota, Opt_i_version,
+ Opt_stripe, Opt_delalloc, Opt_nodelalloc,
+ Opt_block_validity, Opt_noblock_validity,
+@@ -1253,6 +1253,7 @@
+ {Opt_iopen, "iopen"},
+ {Opt_noiopen, "noiopen"},
+ {Opt_iopen_nopriv, "iopen_nopriv"},
++ {Opt_dirdata, "dirdata"},
+ {Opt_barrier, "barrier=%u"},
+ {Opt_barrier, "barrier"},
+ {Opt_nobarrier, "nobarrier"},
+@@ -1631,6 +1632,9 @@
+ case Opt_noiopen:
+ case Opt_iopen_nopriv:
+ break;
++ case Opt_dirdata:
++ set_opt(sbi->s_mount_opt, DIRDATA);
++ break;
+ case Opt_ignore:
+ break;
+ case Opt_resize: