dnl # The prototype however is still available which means it is safe
dnl # to acquire the symbol's address using spl_kallsyms_lookup_name().
dnl #
+dnl # The Proxmox VE kernel contains a patch which renames the function
+dnl # invalidate_inodes() to invalidate_inodes_check(). In the process
+dnl # it adds a 'check' argument and a '#define invalidate_inodes(x)'
+dnl # compatibility wrapper for legacy callers. Therefore, if either
+dnl # of these functions are exported invalidate_inodes() can be
+dnl # safely used.
+dnl #
AC_DEFUN([SPL_AC_KERNEL_INVALIDATE_INODES], [
SPL_CHECK_SYMBOL_EXPORT(
[invalidate_inodes],
[AC_DEFINE(HAVE_INVALIDATE_INODES, 1,
[invalidate_inodes() is available])],
[])
+ SPL_CHECK_SYMBOL_EXPORT(
+ [invalidate_inodes_check],
+ [],
+ [AC_DEFINE(HAVE_INVALIDATE_INODES_CHECK, 1,
+ [invalidate_inodes_check() is available])],
+ [])
])
dnl #
fi
+ { $as_echo "$as_me:$LINENO: checking whether symbol invalidate_inodes_check is exported" >&5
+$as_echo_n "checking whether symbol invalidate_inodes_check is exported... " >&6; }
+ grep -q -E '[[:space:]]invalidate_inodes_check[[:space:]]' \
+ $LINUX_OBJ/Module*.symvers 2>/dev/null
+ rc=$?
+ if test $rc -ne 0; then
+ export=0
+ for file in ; do
+ grep -q -E "EXPORT_SYMBOL.*(invalidate_inodes_check)" \
+ "$LINUX_OBJ/$file" 2>/dev/null
+ rc=$?
+ if test $rc -eq 0; then
+ export=1
+ break;
+ fi
+ done
+ if test $export -eq 0; then
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+
+ else
+ { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_INVALIDATE_INODES_CHECK 1
+_ACEOF
+
+ fi
+ else
+ { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_INVALIDATE_INODES_CHECK 1
+_ACEOF
+
+ fi
+
{ $as_echo "$as_me:$LINENO: checking whether invalidate_inodes() wants 2 args" >&5
$as_echo_n "checking whether invalidate_inodes() wants 2 args... " >&6; }
fi
+ { $as_echo "$as_me:$LINENO: checking whether symbol invalidate_inodes_check is exported" >&5
+$as_echo_n "checking whether symbol invalidate_inodes_check is exported... " >&6; }
+ grep -q -E '[[:space:]]invalidate_inodes_check[[:space:]]' \
+ $LINUX_OBJ/Module*.symvers 2>/dev/null
+ rc=$?
+ if test $rc -ne 0; then
+ export=0
+ for file in ; do
+ grep -q -E "EXPORT_SYMBOL.*(invalidate_inodes_check)" \
+ "$LINUX_OBJ/$file" 2>/dev/null
+ rc=$?
+ if test $rc -eq 0; then
+ export=1
+ break;
+ fi
+ done
+ if test $export -eq 0; then
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+
+ else
+ { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_INVALIDATE_INODES_CHECK 1
+_ACEOF
+
+ fi
+ else
+ { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_INVALIDATE_INODES_CHECK 1
+_ACEOF
+
+ fi
+
{ $as_echo "$as_me:$LINENO: checking whether invalidate_inodes() wants 2 args" >&5
$as_echo_n "checking whether invalidate_inodes() wants 2 args... " >&6; }
* As for 2.6.39 invalidate_inodes() was updated to take a second
* argument which controls how dirty inodes should be handled.
*/
-#ifdef HAVE_INVALIDATE_INODES
+#if defined(HAVE_INVALIDATE_INODES) || defined(HAVE_INVALIDATE_INODES_CHECK)
# ifdef HAVE_2ARGS_INVALIDATE_INODES
# define spl_invalidate_inodes(sb, kd) invalidate_inodes(sb, kd)
# else
extern invalidate_inodes_t invalidate_inodes_fn;
# define spl_invalidate_inodes(sb, kd) invalidate_inodes_fn(sb)
# endif /* HAVE_2ARGS_INVALIDATE_INODES */
-#endif /* HAVE_INVALIDATE_INODES */
+#endif /* HAVE_INVALIDATE_INODES || HAVE_INVALIDATE_INODES_CHECK */
#if !defined(HAVE_SHRINK_CONTROL_STRUCT)
struct shrink_control {
#endif /* NEED_GET_ZONE_COUNTS */
EXPORT_SYMBOL(spl_global_page_state);
-#ifndef HAVE_INVALIDATE_INODES
+#if !defined(HAVE_INVALIDATE_INODES) && !defined(HAVE_INVALIDATE_INODES_CHECK)
invalidate_inodes_t invalidate_inodes_fn = SYMBOL_POISON;
EXPORT_SYMBOL(invalidate_inodes_fn);
-#endif /* HAVE_INVALIDATE_INODES */
+#endif /* !HAVE_INVALIDATE_INODES && !HAVE_INVALIDATE_INODES_CHECK */
#ifndef HAVE_SHRINK_DCACHE_MEMORY
shrink_dcache_memory_t shrink_dcache_memory_fn = SYMBOL_POISON;
*/
spl_kmem_init_globals();
-#ifndef HAVE_INVALIDATE_INODES
+#if !defined(HAVE_INVALIDATE_INODES) && !defined(HAVE_INVALIDATE_INODES_CHECK)
invalidate_inodes_fn = (invalidate_inodes_t)
spl_kallsyms_lookup_name("invalidate_inodes");
if (!invalidate_inodes_fn) {
printk(KERN_ERR "Error: Unknown symbol invalidate_inodes\n");
return -EFAULT;
}
-#endif /* HAVE_INVALIDATE_INODES */
+#endif /* !HAVE_INVALIDATE_INODES && !HAVE_INVALIDATE_INODES_CHECK */
#ifndef HAVE_SHRINK_DCACHE_MEMORY
/* When shrink_dcache_memory_fn == NULL support is disabled */
/* invalidate_inodes() is available */
#undef HAVE_INVALIDATE_INODES
+/* invalidate_inodes_check() is available */
+#undef HAVE_INVALIDATE_INODES_CHECK
+
/* kallsyms_lookup_name() is available */
#undef HAVE_KALLSYMS_LOOKUP_NAME