@@ -2874,6 +2874,30 @@ int rpc_clnt_test_and_add_xprt(struct rpc_clnt *clnt,
2874
2874
}
2875
2875
EXPORT_SYMBOL_GPL (rpc_clnt_test_and_add_xprt );
2876
2876
2877
+ static int rpc_clnt_add_xprt_helper (struct rpc_clnt * clnt ,
2878
+ struct rpc_xprt * xprt ,
2879
+ struct rpc_add_xprt_test * data )
2880
+ {
2881
+ struct rpc_task * task ;
2882
+ int status = - EADDRINUSE ;
2883
+
2884
+ /* Test the connection */
2885
+ task = rpc_call_null_helper (clnt , xprt , NULL , 0 , NULL , NULL );
2886
+ if (IS_ERR (task ))
2887
+ return PTR_ERR (task );
2888
+
2889
+ status = task -> tk_status ;
2890
+ rpc_put_task (task );
2891
+
2892
+ if (status < 0 )
2893
+ return status ;
2894
+
2895
+ /* rpc_xprt_switch and rpc_xprt are deferrenced by add_xprt_test() */
2896
+ data -> add_xprt_test (clnt , xprt , data -> data );
2897
+
2898
+ return 0 ;
2899
+ }
2900
+
2877
2901
/**
2878
2902
* rpc_clnt_setup_test_and_add_xprt()
2879
2903
*
@@ -2897,8 +2921,6 @@ int rpc_clnt_setup_test_and_add_xprt(struct rpc_clnt *clnt,
2897
2921
struct rpc_xprt * xprt ,
2898
2922
void * data )
2899
2923
{
2900
- struct rpc_task * task ;
2901
- struct rpc_add_xprt_test * xtest = (struct rpc_add_xprt_test * )data ;
2902
2924
int status = - EADDRINUSE ;
2903
2925
2904
2926
xprt = xprt_get (xprt );
@@ -2907,31 +2929,19 @@ int rpc_clnt_setup_test_and_add_xprt(struct rpc_clnt *clnt,
2907
2929
if (rpc_xprt_switch_has_addr (xps , (struct sockaddr * )& xprt -> addr ))
2908
2930
goto out_err ;
2909
2931
2910
- /* Test the connection */
2911
- task = rpc_call_null_helper (clnt , xprt , NULL , 0 , NULL , NULL );
2912
- if (IS_ERR (task )) {
2913
- status = PTR_ERR (task );
2914
- goto out_err ;
2915
- }
2916
- status = task -> tk_status ;
2917
- rpc_put_task (task );
2918
-
2932
+ status = rpc_clnt_add_xprt_helper (clnt , xprt , data );
2919
2933
if (status < 0 )
2920
2934
goto out_err ;
2921
2935
2922
- /* rpc_xprt_switch and rpc_xprt are deferrenced by add_xprt_test() */
2923
- xtest -> add_xprt_test (clnt , xprt , xtest -> data );
2924
-
2925
- xprt_put (xprt );
2926
- xprt_switch_put (xps );
2927
-
2928
- /* so that rpc_clnt_add_xprt does not call rpc_xprt_switch_add_xprt */
2929
- return 1 ;
2936
+ status = 1 ;
2930
2937
out_err :
2931
2938
xprt_put (xprt );
2932
2939
xprt_switch_put (xps );
2933
- pr_info ("RPC: rpc_clnt_test_xprt failed: %d addr %s not added\n" ,
2934
- status , xprt -> address_strings [RPC_DISPLAY_ADDR ]);
2940
+ if (status < 0 )
2941
+ pr_info ("RPC: rpc_clnt_test_xprt failed: %d addr %s not "
2942
+ "added\n" , status ,
2943
+ xprt -> address_strings [RPC_DISPLAY_ADDR ]);
2944
+ /* so that rpc_clnt_add_xprt does not call rpc_xprt_switch_add_xprt */
2935
2945
return status ;
2936
2946
}
2937
2947
EXPORT_SYMBOL_GPL (rpc_clnt_setup_test_and_add_xprt );
0 commit comments