--- /dev/null
+commit c1a9f672dd752df609a38126e33457c2064329e6
+Author: Johann Lombardi <johann@sun.com>
+Date: Wed Oct 6 15:26:43 2010 +0200
+
+ Revert "ext4: Fix potential fiemap deadlock (mmap_sem vs. i_data_sem)"
+
+ This reverts commit fab3a549e204172236779f502eccb4f9bf0dc87d.
+
+diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
+index 06328d3..51c9452 100644
+--- a/fs/ext4/extents.c
++++ b/fs/ext4/extents.c
+@@ -1862,9 +1862,7 @@ int ext4_ext_walk_space(struct inode *inode, ext4_lblk_t block,
+ while (block < last && block != EXT_MAX_BLOCK) {
+ num = last - block;
+ /* find extent for this block */
+- down_read(&EXT4_I(inode)->i_data_sem);
+ path = ext4_ext_find_extent(inode, block, path);
+- up_read(&EXT4_I(inode)->i_data_sem);
+ if (IS_ERR(path)) {
+ err = PTR_ERR(path);
+ path = NULL;
+@@ -3956,8 +3954,10 @@ int ext4_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
+ * Walk the extent tree gathering extent information.
+ * ext4_ext_fiemap_cb will push extents back to user.
+ */
++ down_read(&EXT4_I(inode)->i_data_sem);
+ error = ext4_ext_walk_space(inode, start_blk, len_blks,
+ ext4_ext_fiemap_cb, fieinfo);
++ up_read(&EXT4_I(inode)->i_data_sem);
+ }
+
+ return error;
# define fsfilt_down_truncate_sem(inode) down(&LDISKFS_I(inode)->truncate_sem);
#else
# ifdef HAVE_EXT4_LDISKFS
-# ifdef WALK_SPACE_HAS_DATA_SEM
- /* Only used in fsfilt_map_nblocks() for now.
- * Please consider redefine it if using elsewhere. */
-# define fsfilt_up_truncate_sem(inode) do{ }while(0)
-# define fsfilt_down_truncate_sem(inode) do{ }while(0)
-# else
# define fsfilt_up_truncate_sem(inode) up_write((&LDISKFS_I(inode)->i_data_sem));
# define fsfilt_down_truncate_sem(inode) down_write((&LDISKFS_I(inode)->i_data_sem));
-# endif
# else
# define fsfilt_up_truncate_sem(inode) mutex_unlock(&LDISKFS_I(inode)->truncate_mutex);
# define fsfilt_down_truncate_sem(inode) mutex_lock(&LDISKFS_I(inode)->truncate_mutex);