])
])
+# LC_WALK_SPACE_HAS_DATA_SEM
+#
+# 2.6.33 ext4_ext_walk_space() takes i_data_sem internally.
+# Not a very robust check, but it will hopefully last long
+# enough until it can avoid being conditional.
+#
+AC_DEFUN([LC_WALK_SPACE_HAS_DATA_SEM],
+[AC_MSG_CHECKING([if ext4_ext_walk_space() takes i_data_sem])
+WALK_SPACE_DATA_SEM="$(awk '/ext4_ext_walk_space/,/ext4_ext_find_extent/' $LINUX/fs/ext4/extents.c | grep -c 'down_read.*i_data_sem')"
+if test "$WALK_SPACE_DATA_SEM" != 0 ; then
+ AC_DEFINE(WALK_SPACE_HAS_DATA_SEM, 1,
+ [ext4_ext_walk_space takes i_data_sem])
+ AC_MSG_RESULT([yes])
+else
+ AC_MSG_RESULT([no])
+fi
+])
+
#
# LC_PROG_LINUX
#
# 2.6.32
LC_NEW_BACKING_DEV_INFO
+ LC_WALK_SPACE_HAS_DATA_SEM
])
#
bp.init_num = bp.num = num;
bp.create = create;
+#if !defined(WALK_SPACE_HAS_DATA_SEM) || !defined(HAVE_EXT4_LDISKFS)
fsfilt_down_truncate_sem(inode);
+#endif
err = fsfilt_ext3_ext_walk_space(base, block, num, ext3_ext_new_extent_cb, &bp);
ext3_ext_invalidate_cache(base);
+#if !defined(WALK_SPACE_HAS_DATA_SEM) || !defined(HAVE_EXT4_LDISKFS)
fsfilt_up_truncate_sem(inode);
+#endif
return err;
}