Skip to content

Commit d96b9c9

Browse files
author
J. Bruce Fields
committed
svcrpc: autoload rdma module
This should fix failures like: # rpc.nfsd --rdma rpc.nfsd: Unable to request RDMA services: Protocol not supported Reported-by: Steve Dickson <[email protected]> Reviewed-by: Chuck Lever <[email protected]> Signed-off-by: J. Bruce Fields <[email protected]>
1 parent d9e4084 commit d96b9c9

File tree

1 file changed

+19
-4
lines changed

1 file changed

+19
-4
lines changed

net/sunrpc/svc_xprt.c

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -244,13 +244,12 @@ void svc_add_new_perm_xprt(struct svc_serv *serv, struct svc_xprt *new)
244244
svc_xprt_received(new);
245245
}
246246

247-
int svc_create_xprt(struct svc_serv *serv, const char *xprt_name,
247+
int _svc_create_xprt(struct svc_serv *serv, const char *xprt_name,
248248
struct net *net, const int family,
249249
const unsigned short port, int flags)
250250
{
251251
struct svc_xprt_class *xcl;
252252

253-
dprintk("svc: creating transport %s[%d]\n", xprt_name, port);
254253
spin_lock(&svc_xprt_class_lock);
255254
list_for_each_entry(xcl, &svc_xprt_class_list, xcl_list) {
256255
struct svc_xprt *newxprt;
@@ -274,12 +273,28 @@ int svc_create_xprt(struct svc_serv *serv, const char *xprt_name,
274273
}
275274
err:
276275
spin_unlock(&svc_xprt_class_lock);
277-
dprintk("svc: transport %s not found\n", xprt_name);
278-
279276
/* This errno is exposed to user space. Provide a reasonable
280277
* perror msg for a bad transport. */
281278
return -EPROTONOSUPPORT;
282279
}
280+
281+
int svc_create_xprt(struct svc_serv *serv, const char *xprt_name,
282+
struct net *net, const int family,
283+
const unsigned short port, int flags)
284+
{
285+
int err;
286+
287+
dprintk("svc: creating transport %s[%d]\n", xprt_name, port);
288+
err = _svc_create_xprt(serv, xprt_name, net, family, port, flags);
289+
if (err == -EPROTONOSUPPORT) {
290+
request_module("svc%s", xprt_name);
291+
err = _svc_create_xprt(serv, xprt_name, net, family, port, flags);
292+
}
293+
if (err)
294+
dprintk("svc: transport %s not found, err %d\n",
295+
xprt_name, err);
296+
return err;
297+
}
283298
EXPORT_SYMBOL_GPL(svc_create_xprt);
284299

285300
/*

0 commit comments

Comments
 (0)