| From d50039ea5ee63c589b0434baa5ecf6e5075bb6f9 Mon Sep 17 00:00:00 2001 |
| From: "J. Bruce Fields" <bfields@redhat.com> |
| Date: Mon, 16 May 2016 17:03:42 -0400 |
| Subject: nfsd4/rpc: move backchannel create logic into rpc code |
| |
| From: J. Bruce Fields <bfields@redhat.com> |
| |
| commit d50039ea5ee63c589b0434baa5ecf6e5075bb6f9 upstream. |
| |
| Also simplify the logic a bit. |
| |
| Signed-off-by: J. Bruce Fields <bfields@redhat.com> |
| Acked-by: Trond Myklebust <trondmy@primarydata.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/nfsd/nfs4callback.c | 18 +----------------- |
| include/linux/sunrpc/clnt.h | 2 -- |
| net/sunrpc/clnt.c | 12 ++++++++++-- |
| 3 files changed, 11 insertions(+), 21 deletions(-) |
| |
| --- a/fs/nfsd/nfs4callback.c |
| +++ b/fs/nfsd/nfs4callback.c |
| @@ -710,22 +710,6 @@ static struct rpc_cred *get_backchannel_ |
| } |
| } |
| |
| -static struct rpc_clnt *create_backchannel_client(struct rpc_create_args *args) |
| -{ |
| - struct rpc_xprt *xprt; |
| - |
| - if (args->protocol != XPRT_TRANSPORT_BC_TCP) |
| - return rpc_create(args); |
| - |
| - xprt = args->bc_xprt->xpt_bc_xprt; |
| - if (xprt) { |
| - xprt_get(xprt); |
| - return rpc_create_xprt(args, xprt); |
| - } |
| - |
| - return rpc_create(args); |
| -} |
| - |
| static int setup_callback_client(struct nfs4_client *clp, struct nfs4_cb_conn *conn, struct nfsd4_session *ses) |
| { |
| int maxtime = max_cb_time(clp->net); |
| @@ -768,7 +752,7 @@ static int setup_callback_client(struct |
| args.authflavor = ses->se_cb_sec.flavor; |
| } |
| /* Create RPC client */ |
| - client = create_backchannel_client(&args); |
| + client = rpc_create(&args); |
| if (IS_ERR(client)) { |
| dprintk("NFSD: couldn't create callback client: %ld\n", |
| PTR_ERR(client)); |
| --- a/include/linux/sunrpc/clnt.h |
| +++ b/include/linux/sunrpc/clnt.h |
| @@ -135,8 +135,6 @@ struct rpc_create_args { |
| #define RPC_CLNT_CREATE_NO_RETRANS_TIMEOUT (1UL << 9) |
| |
| struct rpc_clnt *rpc_create(struct rpc_create_args *args); |
| -struct rpc_clnt *rpc_create_xprt(struct rpc_create_args *args, |
| - struct rpc_xprt *xprt); |
| struct rpc_clnt *rpc_bind_new_program(struct rpc_clnt *, |
| const struct rpc_program *, u32); |
| void rpc_task_reset_client(struct rpc_task *task, struct rpc_clnt *clnt); |
| --- a/net/sunrpc/clnt.c |
| +++ b/net/sunrpc/clnt.c |
| @@ -442,7 +442,7 @@ out_no_rpciod: |
| return ERR_PTR(err); |
| } |
| |
| -struct rpc_clnt *rpc_create_xprt(struct rpc_create_args *args, |
| +static struct rpc_clnt *rpc_create_xprt(struct rpc_create_args *args, |
| struct rpc_xprt *xprt) |
| { |
| struct rpc_clnt *clnt = NULL; |
| @@ -474,7 +474,6 @@ struct rpc_clnt *rpc_create_xprt(struct |
| |
| return clnt; |
| } |
| -EXPORT_SYMBOL_GPL(rpc_create_xprt); |
| |
| /** |
| * rpc_create - create an RPC client and transport with one call |
| @@ -500,6 +499,15 @@ struct rpc_clnt *rpc_create(struct rpc_c |
| }; |
| char servername[48]; |
| |
| + if (args->bc_xprt) { |
| + WARN_ON(args->protocol != XPRT_TRANSPORT_BC_TCP); |
| + xprt = args->bc_xprt->xpt_bc_xprt; |
| + if (xprt) { |
| + xprt_get(xprt); |
| + return rpc_create_xprt(args, xprt); |
| + } |
| + } |
| + |
| if (args->flags & RPC_CLNT_CREATE_INFINITE_SLOTS) |
| xprtargs.flags |= XPRT_CREATE_INFINITE_SLOTS; |
| if (args->flags & RPC_CLNT_CREATE_NO_IDLE_TIMEOUT) |