Summary: Auto-load RPC authentication kernel modules (client-side)
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 <[email protected]>
net/sunrpc/auth.c | 16 ++++++++++++++--
1 files changed, 14 insertions(+), 2 deletions(-)
Index: build/net/sunrpc/auth.c
===================================================================
--- build.orig/net/sunrpc/auth.c
+++ build/net/sunrpc/auth.c
@@ -64,14 +64,26 @@ rpcauth_create(rpc_authflavor_t pseudofl
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;
}
--
Olaf Kirch | --- o --- Nous sommes du soleil we love when we play
[email protected] | / | \ sol.dhoop.naytheet.ah kin.ir.samse.qurax
-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems? Stop! Download the new AJAX search engine that makes
searching your log files as easy as surfing the web. DOWNLOAD SPLUNK!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=103432&bid=230486&dat=121642
_______________________________________________
NFS maillist - [email protected]
https://lists.sourceforge.net/lists/listinfo/nfs
On Tue, 2006-01-31 at 11:13 +0100, Olaf Kirch wrote:
> Summary: Auto-load RPC authentication kernel modules (client-side)
>
> 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.
Looks good. Applied
Cheers,
Trond
-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems? Stop! Download the new AJAX search engine that makes
searching your log files as easy as surfing the web. DOWNLOAD SPLUNK!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=103432&bid=230486&dat=121642
_______________________________________________
NFS maillist - [email protected]
https://lists.sourceforge.net/lists/listinfo/nfs
i like it. i suppose i should add similar logic to load transport
modules automatically.
Olaf Kirch wrote:
> Summary: Auto-load RPC authentication kernel modules (client-side)
>
> 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 <[email protected]>
>
> net/sunrpc/auth.c | 16 ++++++++++++++--
> 1 files changed, 14 insertions(+), 2 deletions(-)
>
> Index: build/net/sunrpc/auth.c
> ===================================================================
> --- build.orig/net/sunrpc/auth.c
> +++ build/net/sunrpc/auth.c
> @@ -64,14 +64,26 @@ rpcauth_create(rpc_authflavor_t pseudofl
> 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;
> }
>