> On Aug 4, 2016, at 3:26 PM, Schumaker, Anna <Anna.Schumaker@xxxxxxxxxx> wrote: > > Hi Andy, > > On 07/27/2016 02:43 PM, andros@xxxxxxxxxx wrote: >> From: Andy Adamson <andros@xxxxxxxxxx> >> >> Signed-off-by: Andy Adamson <andros@xxxxxxxxxx> >> --- >> include/linux/sunrpc/clnt.h | 2 ++ >> net/sunrpc/clnt.c | 18 ++++++++++++++++++ >> 2 files changed, 20 insertions(+) >> >> diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h >> index 99410bb..ebc83df 100644 >> --- a/include/linux/sunrpc/clnt.h >> +++ b/include/linux/sunrpc/clnt.h >> @@ -189,6 +189,8 @@ int rpc_clnt_test_and_add_xprt(struct rpc_clnt *clnt, >> struct rpc_xprt_switch *xps, >> struct rpc_xprt *xprt, >> void *dummy); >> +int rpc_clnt_test_xprt(struct rpc_clnt *clnt, >> + struct rpc_xprt *xprt); >> int rpc_clnt_add_xprt(struct rpc_clnt *, struct xprt_create *, >> int (*setup)(struct rpc_clnt *, >> struct rpc_xprt_switch *, >> diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c >> index 459f9b1..822060f 100644 >> --- a/net/sunrpc/clnt.c >> +++ b/net/sunrpc/clnt.c >> @@ -2614,6 +2614,24 @@ int rpc_clnt_test_and_add_xprt(struct rpc_clnt *clnt, >> } >> EXPORT_SYMBOL_GPL(rpc_clnt_test_and_add_xprt); >> >> +int rpc_clnt_test_xprt(struct rpc_clnt *clnt, struct rpc_xprt *xprt) > > Looks like rpc_clnt_test_and_add_xprt() runs the same testing code. Can you swap the order of these functions in clnt.c and then have test_and_add_xprt() call test_xprt()? rpc_clnt_test_xprt uses a SYNC null call while test_and_add_xprt uses an ASYNC call. Futhermore, while both test_xprt and test_and_add_xprt return an error if the rpc_call_null_helper task cannot be allocated (ERR_PTR(task) in rpc_new_task), test_and_add_xprt ignores the tk_status and returns 1 while test_xprt returns the tk_status. For these reasons I think it is cleaner and easier to read to keep them separate functions. —>Andy : > > Thanks, > Anna > >> +{ >> + struct rpc_cred *cred; >> + struct rpc_task *task; >> + int status; >> + >> + cred = authnull_ops.lookup_cred(NULL, NULL, 0); >> + task = rpc_call_null_helper(clnt, xprt, cred, >> + RPC_TASK_SOFT | RPC_TASK_SOFTCONN, NULL, NULL); >> + put_rpccred(cred); >> + if (IS_ERR(task)) >> + return PTR_ERR(task); >> + status = task->tk_status; >> + rpc_put_task(task); >> + return status; >> +} >> +EXPORT_SYMBOL_GPL(rpc_clnt_test_xprt); >> + >> /** >> * rpc_clnt_add_xprt - Add a new transport to a rpc_clnt >> * @clnt: pointer to struct rpc_clnt ��.n��������+%������w��{.n�����{��w���jg��������ݢj����G�������j:+v���w�m������w�������h�����٥