sunrpc: fix up rpcauth_remove_module section mismatch
authorStephen Rothwell <sfr@canb.auug.org.au>
Wed, 29 Sep 2010 04:16:57 +0000 (14:16 +1000)
committerJ. Bruce Fields <bfields@redhat.com>
Wed, 29 Sep 2010 16:27:37 +0000 (12:27 -0400)
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>
include/linux/sunrpc/auth.h
net/sunrpc/auth.c
net/sunrpc/auth_generic.c

index 5bbc447175dce88239097002e403a7957d4e42a2..b2024757edd5a7ca2d15d5bb4e149ebe8205f7eb 100644 (file)
@@ -122,8 +122,8 @@ extern const struct rpc_authops     authnull_ops;
 int __init             rpc_init_authunix(void);
 int __init             rpc_init_generic_auth(void);
 int __init             rpcauth_init_module(void);
-void __exit            rpcauth_remove_module(void);
-void __exit            rpc_destroy_generic_auth(void);
+void                   rpcauth_remove_module(void);
+void                   rpc_destroy_generic_auth(void);
 void                   rpc_destroy_authunix(void);
 
 struct rpc_cred *      rpc_lookup_cred(void);
index e9eaaf7d43c18104167692f801794bdacf89b97e..2c0d9e6093b89b1a7d1c2ac1e6128af0cb947624 100644 (file)
@@ -658,7 +658,7 @@ out1:
        return err;
 }
 
-void __exit rpcauth_remove_module(void)
+void rpcauth_remove_module(void)
 {
        rpc_destroy_authunix();
        rpc_destroy_generic_auth();
index 43162bb3b78f47cb30c6054907839f92281f4c92..e010a015d99671f27a22573a31eae75ae6cda955 100644 (file)
@@ -158,7 +158,7 @@ int __init rpc_init_generic_auth(void)
        return rpcauth_init_credcache(&generic_auth);
 }
 
-void __exit rpc_destroy_generic_auth(void)
+void rpc_destroy_generic_auth(void)
 {
        rpcauth_destroy_credcache(&generic_auth);
 }