aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc/socket.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2018-10-13 00:38:46 -0400
committerDavid S. Miller <davem@davemloft.net>2018-10-13 00:38:46 -0400
commitd864991b220b7c62e81d21209e1fd978fd67352c (patch)
treeb570a1ad6fc1b959c5bcda6ceca0b321319c01e0 /net/tipc/socket.c
parenta688c53a0277d8ea21d86a5c56884892e3442c5e (diff)
parentbab5c80b211035739997ebd361a679fa85b39465 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts were easy to resolve using immediate context mostly, except the cls_u32.c one where I simply too the entire HEAD chunk. Signed-off-by: David S. Miller <davem@davemloft.net>
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);