From 914b063133365a17b1f607cbe96102259e497753 Mon Sep 17 00:00:00 2001 From: Brian Behlendorf Date: Wed, 23 Feb 2011 12:25:45 -0800 Subject: Linux compat 2.6.37, invalidate_inodes() In the 2.6.37 kernel the function invalidate_inodes() is no longer exported for use by modules. This memory management functionality is needed to invalidate the inodes attached to a super block without unmounting the filesystem. Because this function still exists in the kernel and the prototype is available is a common header all we strictly need is the symbol address. The address is obtained using spl_kallsyms_lookup_name() and assigned to the variable invalidate_inodes_fn. Then a #define is used to replace all instances of invalidate_inodes() with a call to the acquired address. All the complexity is hidden behind HAVE_INVALIDATE_INODES and invalidate_inodes() can be used as usual. Long term we should try to get this, or another, interface made available to modules again. --- include/linux/mm_compat.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'include/linux/mm_compat.h') diff --git a/include/linux/mm_compat.h b/include/linux/mm_compat.h index 57f83dcc9..5c5198b90 100644 --- a/include/linux/mm_compat.h +++ b/include/linux/mm_compat.h @@ -26,6 +26,7 @@ #define _SPL_MM_COMPAT_H #include +#include /* * Linux 2.6.31 API Change. @@ -43,4 +44,16 @@ #define high_wmark_pages(z) (z->pages_high) #endif +/* + * 2.6.37 API compat, + * The function invalidate_inodes() is no longer exported by the kernel. + * The prototype however is still available which means it is safe + * to acquire the symbol's address using spl_kallsyms_lookup_name(). + */ +#ifndef HAVE_INVALIDATE_INODES +typedef int (*invalidate_inodes_t)(struct super_block *sb); +extern invalidate_inodes_t invalidate_inodes_fn; +#define invalidate_inodes(sb) invalidate_inodes_fn(sb) +#endif /* HAVE_INVALIDATE_INODES */ + #endif /* SPL_MM_COMPAT_H */ -- cgit v1.2.3