mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 18:40:43 +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:
@@ -180,6 +180,11 @@ spl_global_page_state(spl_zone_stat_item_t item)
|
||||
#endif /* NEED_GET_ZONE_COUNTS */
|
||||
EXPORT_SYMBOL(spl_global_page_state);
|
||||
|
||||
#ifndef HAVE_INVALIDATE_INODES
|
||||
invalidate_inodes_t invalidate_inodes_fn = SYMBOL_POISON;
|
||||
EXPORT_SYMBOL(invalidate_inodes_fn);
|
||||
#endif /* HAVE_INVALIDATE_INODES */
|
||||
|
||||
pgcnt_t
|
||||
spl_kmem_availrmem(void)
|
||||
{
|
||||
@@ -2089,6 +2094,15 @@ spl_kmem_init_kallsyms_lookup(void)
|
||||
*/
|
||||
spl_kmem_init_globals();
|
||||
|
||||
#ifndef HAVE_INVALIDATE_INODES
|
||||
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 */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user