From: Olaf Kirch Date: Mon, 20 Mar 2006 18:44:08 +0000 (-0500) Subject: SUNRPC: Auto-load RPC authentication kernel modules X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=f344f6df4b2baa3e5c553c461735dfaf92f44be7;p=mv-sheeva.git SUNRPC: Auto-load RPC authentication kernel modules This patch adds a request_module call to rpcauth_create which will try to auto-load the kernel module for the requested authentication flavor. For kernels with modular sunrpc, this reduces the admin overhead for the user. Signed-off-by: Olaf Kirch Signed-off-by: Trond Myklebust --- diff --git a/net/sunrpc/auth.c b/net/sunrpc/auth.c index 8d6f1a176b1..55163af3dca 100644 --- a/net/sunrpc/auth.c +++ b/net/sunrpc/auth.c @@ -64,14 +64,26 @@ rpcauth_create(rpc_authflavor_t pseudoflavor, struct rpc_clnt *clnt) struct rpc_authops *ops; u32 flavor = pseudoflavor_to_flavor(pseudoflavor); - if (flavor >= RPC_AUTH_MAXFLAVOR || !(ops = auth_flavors[flavor])) - return ERR_PTR(-EINVAL); + auth = ERR_PTR(-EINVAL); + if (flavor >= RPC_AUTH_MAXFLAVOR) + goto out; + + /* FIXME - auth_flavors[] really needs an rw lock, + * and module refcounting. */ +#ifdef CONFIG_KMOD + if ((ops = auth_flavors[flavor]) == NULL) + request_module("rpc-auth-%u", flavor); +#endif + if ((ops = auth_flavors[flavor]) == NULL) + goto out; auth = ops->create(clnt, pseudoflavor); if (IS_ERR(auth)) return auth; if (clnt->cl_auth) rpcauth_destroy(clnt->cl_auth); clnt->cl_auth = auth; + +out: return auth; }