diff options
author | David S. Miller <davem@davemloft.net> | 2015-12-03 21:03:21 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-12-03 21:09:12 -0500 |
commit | f188b951f33a0464338f94f928338f84fc0e4392 (patch) | |
tree | 17ad63719242b1de0266627a1dc92ba869a3ba4e /net/tipc | |
parent | 6b20da4d8f3f6a3be9f67e3207f435cfaa5f7f97 (diff) | |
parent | 071f5d105a0ae93aeb02197c4ee3557e8cc57a21 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts:
drivers/net/ethernet/renesas/ravb_main.c
kernel/bpf/syscall.c
net/ipv4/ipmr.c
All three conflicts were cases of overlapping changes.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/tipc')
-rw-r--r-- | net/tipc/link.c | 2 | ||||
-rw-r--r-- | net/tipc/socket.c | 10 | ||||
-rw-r--r-- | net/tipc/udp_media.c | 7 |
3 files changed, 14 insertions, 5 deletions
diff --git a/net/tipc/link.c b/net/tipc/link.c index b11afe71dfc1..0c2944fb9ae0 100644 --- a/net/tipc/link.c +++ b/net/tipc/link.c | |||
@@ -348,6 +348,7 @@ void tipc_link_add_bc_peer(struct tipc_link *snd_l, | |||
348 | 348 | ||
349 | snd_l->ackers++; | 349 | snd_l->ackers++; |
350 | rcv_l->acked = snd_l->snd_nxt - 1; | 350 | rcv_l->acked = snd_l->snd_nxt - 1; |
351 | snd_l->state = LINK_ESTABLISHED; | ||
351 | tipc_link_build_bc_init_msg(uc_l, xmitq); | 352 | tipc_link_build_bc_init_msg(uc_l, xmitq); |
352 | } | 353 | } |
353 | 354 | ||
@@ -363,6 +364,7 @@ void tipc_link_remove_bc_peer(struct tipc_link *snd_l, | |||
363 | rcv_l->state = LINK_RESET; | 364 | rcv_l->state = LINK_RESET; |
364 | if (!snd_l->ackers) { | 365 | if (!snd_l->ackers) { |
365 | tipc_link_reset(snd_l); | 366 | tipc_link_reset(snd_l); |
367 | snd_l->state = LINK_RESET; | ||
366 | __skb_queue_purge(xmitq); | 368 | __skb_queue_purge(xmitq); |
367 | } | 369 | } |
368 | } | 370 | } |
diff --git a/net/tipc/socket.c b/net/tipc/socket.c index 525acf6dd1c6..69c29050f14a 100644 --- a/net/tipc/socket.c +++ b/net/tipc/socket.c | |||
@@ -105,6 +105,7 @@ struct tipc_sock { | |||
105 | static int tipc_backlog_rcv(struct sock *sk, struct sk_buff *skb); | 105 | static int tipc_backlog_rcv(struct sock *sk, struct sk_buff *skb); |
106 | static void tipc_data_ready(struct sock *sk); | 106 | static void tipc_data_ready(struct sock *sk); |
107 | static void tipc_write_space(struct sock *sk); | 107 | static void tipc_write_space(struct sock *sk); |
108 | static void tipc_sock_destruct(struct sock *sk); | ||
108 | static int tipc_release(struct socket *sock); | 109 | static int tipc_release(struct socket *sock); |
109 | static int tipc_accept(struct socket *sock, struct socket *new_sock, int flags); | 110 | static int tipc_accept(struct socket *sock, struct socket *new_sock, int flags); |
110 | static int tipc_wait_for_sndmsg(struct socket *sock, long *timeo_p); | 111 | static int tipc_wait_for_sndmsg(struct socket *sock, long *timeo_p); |
@@ -381,6 +382,7 @@ static int tipc_sk_create(struct net *net, struct socket *sock, | |||
381 | sk->sk_rcvbuf = sysctl_tipc_rmem[1]; | 382 | sk->sk_rcvbuf = sysctl_tipc_rmem[1]; |
382 | sk->sk_data_ready = tipc_data_ready; | 383 | sk->sk_data_ready = tipc_data_ready; |
383 | sk->sk_write_space = tipc_write_space; | 384 | sk->sk_write_space = tipc_write_space; |
385 | sk->sk_destruct = tipc_sock_destruct; | ||
384 | tsk->conn_timeout = CONN_TIMEOUT_DEFAULT; | 386 | tsk->conn_timeout = CONN_TIMEOUT_DEFAULT; |
385 | tsk->sent_unacked = 0; | 387 | tsk->sent_unacked = 0; |
386 | atomic_set(&tsk->dupl_rcvcnt, 0); | 388 | atomic_set(&tsk->dupl_rcvcnt, 0); |
@@ -470,9 +472,6 @@ static int tipc_release(struct socket *sock) | |||
470 | tipc_node_remove_conn(net, dnode, tsk->portid); | 472 | tipc_node_remove_conn(net, dnode, tsk->portid); |
471 | } | 473 | } |
472 | 474 | ||
473 | /* Discard any remaining (connection-based) messages in receive queue */ | ||
474 | __skb_queue_purge(&sk->sk_receive_queue); | ||
475 | |||
476 | /* Reject any messages that accumulated in backlog queue */ | 475 | /* Reject any messages that accumulated in backlog queue */ |
477 | sock->state = SS_DISCONNECTING; | 476 | sock->state = SS_DISCONNECTING; |
478 | release_sock(sk); | 477 | release_sock(sk); |
@@ -1515,6 +1514,11 @@ static void tipc_data_ready(struct sock *sk) | |||
1515 | rcu_read_unlock(); | 1514 | rcu_read_unlock(); |
1516 | } | 1515 | } |
1517 | 1516 | ||
1517 | static void tipc_sock_destruct(struct sock *sk) | ||
1518 | { | ||
1519 | __skb_queue_purge(&sk->sk_receive_queue); | ||
1520 | } | ||
1521 | |||
1518 | /** | 1522 | /** |
1519 | * filter_connect - Handle all incoming messages for a connection-based socket | 1523 | * filter_connect - Handle all incoming messages for a connection-based socket |
1520 | * @tsk: TIPC socket | 1524 | * @tsk: TIPC socket |
diff --git a/net/tipc/udp_media.c b/net/tipc/udp_media.c index 816914ef228d..6af78c6276b4 100644 --- a/net/tipc/udp_media.c +++ b/net/tipc/udp_media.c | |||
@@ -157,8 +157,11 @@ static int tipc_udp_send_msg(struct net *net, struct sk_buff *skb, | |||
157 | struct udp_media_addr *src = (struct udp_media_addr *)&b->addr.value; | 157 | struct udp_media_addr *src = (struct udp_media_addr *)&b->addr.value; |
158 | struct rtable *rt; | 158 | struct rtable *rt; |
159 | 159 | ||
160 | if (skb_headroom(skb) < UDP_MIN_HEADROOM) | 160 | if (skb_headroom(skb) < UDP_MIN_HEADROOM) { |
161 | pskb_expand_head(skb, UDP_MIN_HEADROOM, 0, GFP_ATOMIC); | 161 | err = pskb_expand_head(skb, UDP_MIN_HEADROOM, 0, GFP_ATOMIC); |
162 | if (err) | ||
163 | goto tx_error; | ||
164 | } | ||
162 | 165 | ||
163 | skb_set_inner_protocol(skb, htons(ETH_P_TIPC)); | 166 | skb_set_inner_protocol(skb, htons(ETH_P_TIPC)); |
164 | ub = rcu_dereference_rtnl(b->media_ptr); | 167 | ub = rcu_dereference_rtnl(b->media_ptr); |