diff options
Diffstat (limited to 'net/tipc/socket.c')
-rw-r--r-- | net/tipc/socket.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/net/tipc/socket.c b/net/tipc/socket.c index db148c4a916a..de09f514428c 100644 --- a/net/tipc/socket.c +++ b/net/tipc/socket.c | |||
@@ -1198,6 +1198,7 @@ void tipc_sk_mcast_rcv(struct net *net, struct sk_buff_head *arrvq, | |||
1198 | * @skb: pointer to message buffer. | 1198 | * @skb: pointer to message buffer. |
1199 | */ | 1199 | */ |
1200 | static void tipc_sk_conn_proto_rcv(struct tipc_sock *tsk, struct sk_buff *skb, | 1200 | static void tipc_sk_conn_proto_rcv(struct tipc_sock *tsk, struct sk_buff *skb, |
1201 | struct sk_buff_head *inputq, | ||
1201 | struct sk_buff_head *xmitq) | 1202 | struct sk_buff_head *xmitq) |
1202 | { | 1203 | { |
1203 | struct tipc_msg *hdr = buf_msg(skb); | 1204 | struct tipc_msg *hdr = buf_msg(skb); |
@@ -1215,7 +1216,16 @@ static void tipc_sk_conn_proto_rcv(struct tipc_sock *tsk, struct sk_buff *skb, | |||
1215 | tipc_node_remove_conn(sock_net(sk), tsk_peer_node(tsk), | 1216 | tipc_node_remove_conn(sock_net(sk), tsk_peer_node(tsk), |
1216 | tsk_peer_port(tsk)); | 1217 | tsk_peer_port(tsk)); |
1217 | sk->sk_state_change(sk); | 1218 | sk->sk_state_change(sk); |
1218 | goto exit; | 1219 | |
1220 | /* State change is ignored if socket already awake, | ||
1221 | * - convert msg to abort msg and add to inqueue | ||
1222 | */ | ||
1223 | msg_set_user(hdr, TIPC_CRITICAL_IMPORTANCE); | ||
1224 | msg_set_type(hdr, TIPC_CONN_MSG); | ||
1225 | msg_set_size(hdr, BASIC_H_SIZE); | ||
1226 | msg_set_hdr_sz(hdr, BASIC_H_SIZE); | ||
1227 | __skb_queue_tail(inputq, skb); | ||
1228 | return; | ||
1219 | } | 1229 | } |
1220 | 1230 | ||
1221 | tsk->probe_unacked = false; | 1231 | tsk->probe_unacked = false; |
@@ -1943,7 +1953,7 @@ static void tipc_sk_proto_rcv(struct sock *sk, | |||
1943 | 1953 | ||
1944 | switch (msg_user(hdr)) { | 1954 | switch (msg_user(hdr)) { |
1945 | case CONN_MANAGER: | 1955 | case CONN_MANAGER: |
1946 | tipc_sk_conn_proto_rcv(tsk, skb, xmitq); | 1956 | tipc_sk_conn_proto_rcv(tsk, skb, inputq, xmitq); |
1947 | return; | 1957 | return; |
1948 | case SOCK_WAKEUP: | 1958 | case SOCK_WAKEUP: |
1949 | tipc_dest_del(&tsk->cong_links, msg_orignode(hdr), 0); | 1959 | tipc_dest_del(&tsk->cong_links, msg_orignode(hdr), 0); |