Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

sunrpc: fix up rpcauth_remove_module section mismatch

On Wed, 29 Sep 2010 14:02:38 +1000 Stephen Rothwell <sfr@canb.auug.org.au> wrote:
>
> After merging the final tree, today's linux-next build (powerpc
> ppc44x_defconfig) produced tis warning:
>
> WARNING: net/sunrpc/sunrpc.o(.init.text+0x110): Section mismatch in reference from the function init_sunrpc() to the function .exit.text:rpcauth_remove_module()
> The function __init init_sunrpc() references
> a function __exit rpcauth_remove_module().
> This is often seen when error handling in the init function
> uses functionality in the exit path.
> The fix is often to remove the __exit annotation of
> rpcauth_remove_module() so it may be used outside an exit section.
>
> Probably caused by commit 2f72c9b73730c335381b13e2bd221abe1acea394
> ("sunrpc: The per-net skeleton").

This actually causes a build failure on a sparc32 defconfig build:

`rpcauth_remove_module' referenced in section `.init.text' of net/built-in.o: defined in discarded section `.exit.text' of net/built-in.o

I applied the following patch for today:

Fixes:

`rpcauth_remove_module' referenced in section `.init.text' of net/built-in.o: defined in discarded section `.exit.text' of net/built-in.o

Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au>
Acked-by: Pavel Emelyanov <xemul@openvz.org>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>

authored by

Stephen Rothwell and committed by
J. Bruce Fields
c135e84a 90d51b02

+4 -4
+2 -2
include/linux/sunrpc/auth.h
··· 122 122 int __init rpc_init_authunix(void); 123 123 int __init rpc_init_generic_auth(void); 124 124 int __init rpcauth_init_module(void); 125 - void __exit rpcauth_remove_module(void); 126 - void __exit rpc_destroy_generic_auth(void); 125 + void rpcauth_remove_module(void); 126 + void rpc_destroy_generic_auth(void); 127 127 void rpc_destroy_authunix(void); 128 128 129 129 struct rpc_cred * rpc_lookup_cred(void);
+1 -1
net/sunrpc/auth.c
··· 658 658 return err; 659 659 } 660 660 661 - void __exit rpcauth_remove_module(void) 661 + void rpcauth_remove_module(void) 662 662 { 663 663 rpc_destroy_authunix(); 664 664 rpc_destroy_generic_auth();
+1 -1
net/sunrpc/auth_generic.c
··· 158 158 return rpcauth_init_credcache(&generic_auth); 159 159 } 160 160 161 - void __exit rpc_destroy_generic_auth(void) 161 + void rpc_destroy_generic_auth(void) 162 162 { 163 163 rpcauth_destroy_credcache(&generic_auth); 164 164 }