diff options
author | Brian Behlendorf <[email protected]> | 2011-02-23 12:25:45 -0800 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2011-02-23 12:44:32 -0800 |
commit | 914b063133365a17b1f607cbe96102259e497753 (patch) | |
tree | f90c6739c85e1c71638aa7e43efc6123eb7d4aec /module/spl | |
parent | bf665d4075e9777af089e669c65f72d5d652f26e (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 'module/spl')
-rw-r--r-- | module/spl/spl-kmem.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/module/spl/spl-kmem.c b/module/spl/spl-kmem.c index 1a9c1fe96..100d674e5 100644 --- a/module/spl/spl-kmem.c +++ b/module/spl/spl-kmem.c @@ -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; } |