diff options
Diffstat (limited to 'net/sunrpc/xprtsock.c')
-rw-r--r-- | net/sunrpc/xprtsock.c | 42 |
1 files changed, 21 insertions, 21 deletions
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c index 966763d735e9..25a3dcf15cae 100644 --- a/net/sunrpc/xprtsock.c +++ b/net/sunrpc/xprtsock.c | |||
@@ -254,7 +254,7 @@ struct sock_xprt { | |||
254 | /* | 254 | /* |
255 | * Saved socket callback addresses | 255 | * Saved socket callback addresses |
256 | */ | 256 | */ |
257 | void (*old_data_ready)(struct sock *, int); | 257 | void (*old_data_ready)(struct sock *); |
258 | void (*old_state_change)(struct sock *); | 258 | void (*old_state_change)(struct sock *); |
259 | void (*old_write_space)(struct sock *); | 259 | void (*old_write_space)(struct sock *); |
260 | void (*old_error_report)(struct sock *); | 260 | void (*old_error_report)(struct sock *); |
@@ -909,6 +909,12 @@ static void xs_tcp_close(struct rpc_xprt *xprt) | |||
909 | xs_tcp_shutdown(xprt); | 909 | xs_tcp_shutdown(xprt); |
910 | } | 910 | } |
911 | 911 | ||
912 | static void xs_xprt_free(struct rpc_xprt *xprt) | ||
913 | { | ||
914 | xs_free_peer_addresses(xprt); | ||
915 | xprt_free(xprt); | ||
916 | } | ||
917 | |||
912 | /** | 918 | /** |
913 | * xs_destroy - prepare to shutdown a transport | 919 | * xs_destroy - prepare to shutdown a transport |
914 | * @xprt: doomed transport | 920 | * @xprt: doomed transport |
@@ -919,8 +925,7 @@ static void xs_destroy(struct rpc_xprt *xprt) | |||
919 | dprintk("RPC: xs_destroy xprt %p\n", xprt); | 925 | dprintk("RPC: xs_destroy xprt %p\n", xprt); |
920 | 926 | ||
921 | xs_close(xprt); | 927 | xs_close(xprt); |
922 | xs_free_peer_addresses(xprt); | 928 | xs_xprt_free(xprt); |
923 | xprt_free(xprt); | ||
924 | module_put(THIS_MODULE); | 929 | module_put(THIS_MODULE); |
925 | } | 930 | } |
926 | 931 | ||
@@ -946,7 +951,7 @@ static int xs_local_copy_to_xdr(struct xdr_buf *xdr, struct sk_buff *skb) | |||
946 | * | 951 | * |
947 | * Currently this assumes we can read the whole reply in a single gulp. | 952 | * Currently this assumes we can read the whole reply in a single gulp. |
948 | */ | 953 | */ |
949 | static void xs_local_data_ready(struct sock *sk, int len) | 954 | static void xs_local_data_ready(struct sock *sk) |
950 | { | 955 | { |
951 | struct rpc_task *task; | 956 | struct rpc_task *task; |
952 | struct rpc_xprt *xprt; | 957 | struct rpc_xprt *xprt; |
@@ -1009,7 +1014,7 @@ static void xs_local_data_ready(struct sock *sk, int len) | |||
1009 | * @len: how much data to read | 1014 | * @len: how much data to read |
1010 | * | 1015 | * |
1011 | */ | 1016 | */ |
1012 | static void xs_udp_data_ready(struct sock *sk, int len) | 1017 | static void xs_udp_data_ready(struct sock *sk) |
1013 | { | 1018 | { |
1014 | struct rpc_task *task; | 1019 | struct rpc_task *task; |
1015 | struct rpc_xprt *xprt; | 1020 | struct rpc_xprt *xprt; |
@@ -1432,7 +1437,7 @@ static int xs_tcp_data_recv(read_descriptor_t *rd_desc, struct sk_buff *skb, uns | |||
1432 | * @bytes: how much data to read | 1437 | * @bytes: how much data to read |
1433 | * | 1438 | * |
1434 | */ | 1439 | */ |
1435 | static void xs_tcp_data_ready(struct sock *sk, int bytes) | 1440 | static void xs_tcp_data_ready(struct sock *sk) |
1436 | { | 1441 | { |
1437 | struct rpc_xprt *xprt; | 1442 | struct rpc_xprt *xprt; |
1438 | read_descriptor_t rd_desc; | 1443 | read_descriptor_t rd_desc; |
@@ -2532,6 +2537,10 @@ static void bc_close(struct rpc_xprt *xprt) | |||
2532 | 2537 | ||
2533 | static void bc_destroy(struct rpc_xprt *xprt) | 2538 | static void bc_destroy(struct rpc_xprt *xprt) |
2534 | { | 2539 | { |
2540 | dprintk("RPC: bc_destroy xprt %p\n", xprt); | ||
2541 | |||
2542 | xs_xprt_free(xprt); | ||
2543 | module_put(THIS_MODULE); | ||
2535 | } | 2544 | } |
2536 | 2545 | ||
2537 | static struct rpc_xprt_ops xs_local_ops = { | 2546 | static struct rpc_xprt_ops xs_local_ops = { |
@@ -2732,7 +2741,7 @@ static struct rpc_xprt *xs_setup_local(struct xprt_create *args) | |||
2732 | return xprt; | 2741 | return xprt; |
2733 | ret = ERR_PTR(-EINVAL); | 2742 | ret = ERR_PTR(-EINVAL); |
2734 | out_err: | 2743 | out_err: |
2735 | xprt_free(xprt); | 2744 | xs_xprt_free(xprt); |
2736 | return ret; | 2745 | return ret; |
2737 | } | 2746 | } |
2738 | 2747 | ||
@@ -2810,7 +2819,7 @@ static struct rpc_xprt *xs_setup_udp(struct xprt_create *args) | |||
2810 | return xprt; | 2819 | return xprt; |
2811 | ret = ERR_PTR(-EINVAL); | 2820 | ret = ERR_PTR(-EINVAL); |
2812 | out_err: | 2821 | out_err: |
2813 | xprt_free(xprt); | 2822 | xs_xprt_free(xprt); |
2814 | return ret; | 2823 | return ret; |
2815 | } | 2824 | } |
2816 | 2825 | ||
@@ -2885,12 +2894,11 @@ static struct rpc_xprt *xs_setup_tcp(struct xprt_create *args) | |||
2885 | xprt->address_strings[RPC_DISPLAY_ADDR], | 2894 | xprt->address_strings[RPC_DISPLAY_ADDR], |
2886 | xprt->address_strings[RPC_DISPLAY_PROTO]); | 2895 | xprt->address_strings[RPC_DISPLAY_PROTO]); |
2887 | 2896 | ||
2888 | |||
2889 | if (try_module_get(THIS_MODULE)) | 2897 | if (try_module_get(THIS_MODULE)) |
2890 | return xprt; | 2898 | return xprt; |
2891 | ret = ERR_PTR(-EINVAL); | 2899 | ret = ERR_PTR(-EINVAL); |
2892 | out_err: | 2900 | out_err: |
2893 | xprt_free(xprt); | 2901 | xs_xprt_free(xprt); |
2894 | return ret; | 2902 | return ret; |
2895 | } | 2903 | } |
2896 | 2904 | ||
@@ -2907,15 +2915,6 @@ static struct rpc_xprt *xs_setup_bc_tcp(struct xprt_create *args) | |||
2907 | struct svc_sock *bc_sock; | 2915 | struct svc_sock *bc_sock; |
2908 | struct rpc_xprt *ret; | 2916 | struct rpc_xprt *ret; |
2909 | 2917 | ||
2910 | if (args->bc_xprt->xpt_bc_xprt) { | ||
2911 | /* | ||
2912 | * This server connection already has a backchannel | ||
2913 | * transport; we can't create a new one, as we wouldn't | ||
2914 | * be able to match replies based on xid any more. So, | ||
2915 | * reuse the already-existing one: | ||
2916 | */ | ||
2917 | return args->bc_xprt->xpt_bc_xprt; | ||
2918 | } | ||
2919 | xprt = xs_setup_xprt(args, xprt_tcp_slot_table_entries, | 2918 | xprt = xs_setup_xprt(args, xprt_tcp_slot_table_entries, |
2920 | xprt_tcp_slot_table_entries); | 2919 | xprt_tcp_slot_table_entries); |
2921 | if (IS_ERR(xprt)) | 2920 | if (IS_ERR(xprt)) |
@@ -2973,13 +2972,14 @@ static struct rpc_xprt *xs_setup_bc_tcp(struct xprt_create *args) | |||
2973 | */ | 2972 | */ |
2974 | xprt_set_connected(xprt); | 2973 | xprt_set_connected(xprt); |
2975 | 2974 | ||
2976 | |||
2977 | if (try_module_get(THIS_MODULE)) | 2975 | if (try_module_get(THIS_MODULE)) |
2978 | return xprt; | 2976 | return xprt; |
2977 | |||
2978 | args->bc_xprt->xpt_bc_xprt = NULL; | ||
2979 | xprt_put(xprt); | 2979 | xprt_put(xprt); |
2980 | ret = ERR_PTR(-EINVAL); | 2980 | ret = ERR_PTR(-EINVAL); |
2981 | out_err: | 2981 | out_err: |
2982 | xprt_free(xprt); | 2982 | xs_xprt_free(xprt); |
2983 | return ret; | 2983 | return ret; |
2984 | } | 2984 | } |
2985 | 2985 | ||