+Index: linux-stage/fs/ext4/extents.c
+===================================================================
+--- linux-stage.orig/fs/ext4/extents.c
++++ linux-stage/fs/ext4/extents.c
+@@ -2461,7 +2461,8 @@ int ext4_ext_index_trans_blocks(struct i
+
+ static inline int get_default_free_blocks_flags(struct inode *inode)
+ {
+- if (S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode))
++ if (S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode) ||
++ ext4_test_inode_flag(inode, EXT4_INODE_EA_INODE))
+ return EXT4_FREE_BLOCKS_METADATA | EXT4_FREE_BLOCKS_FORGET;
+ else if (ext4_should_journal_data(inode))
+ return EXT4_FREE_BLOCKS_FORGET;
+Index: linux-stage/fs/ext4/indirect.c
+===================================================================
+--- linux-stage.orig/fs/ext4/indirect.c
++++ linux-stage/fs/ext4/indirect.c
+@@ -959,7 +959,8 @@ static int ext4_clear_blocks(handle_t *h
+ int flags = EXT4_FREE_BLOCKS_VALIDATED;
+ int err;
+
+- if (S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode))
++ if (S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode) ||
++ ext4_test_inode_flag(inode, EXT4_INODE_EA_INODE))
+ flags |= EXT4_FREE_BLOCKS_FORGET | EXT4_FREE_BLOCKS_METADATA;
+ else if (ext4_should_journal_data(inode))
+ flags |= EXT4_FREE_BLOCKS_FORGET;