aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc/socket.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/tipc/socket.c')
-rw-r--r--net/tipc/socket.c14
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 */
1200static void tipc_sk_conn_proto_rcv(struct tipc_sock *tsk, struct sk_buff *skb, 1200static 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);