summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorBrian Behlendorf <[email protected]>2011-02-23 12:25:45 -0800
committerBrian Behlendorf <[email protected]>2011-02-23 12:44:32 -0800
commit914b063133365a17b1f607cbe96102259e497753 (patch)
treef90c6739c85e1c71638aa7e43efc6123eb7d4aec /include
parentbf665d4075e9777af089e669c65f72d5d652f26e (diff)
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.
Diffstat (limited to 'include')
-rw-r--r--include/linux/mm_compat.h13
1 files changed, 13 insertions, 0 deletions
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 <linux/mm.h>
+#include <linux/fs.h>
/*
* 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 */