mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 10:37:35 +03:00
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.
This commit is contained in:
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user