aboutsummaryrefslogtreecommitdiffstats
path: root/net/core/sock.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/core/sock.c')
-rw-r--r--net/core/sock.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/net/core/sock.c b/net/core/sock.c
index 6b654b3ddfda..a6000fbad294 100644
--- a/net/core/sock.c
+++ b/net/core/sock.c
@@ -691,7 +691,8 @@ set_rcvbuf:
691 691
692 case SO_KEEPALIVE: 692 case SO_KEEPALIVE:
693#ifdef CONFIG_INET 693#ifdef CONFIG_INET
694 if (sk->sk_protocol == IPPROTO_TCP) 694 if (sk->sk_protocol == IPPROTO_TCP &&
695 sk->sk_type == SOCK_STREAM)
695 tcp_set_keepalive(sk, valbool); 696 tcp_set_keepalive(sk, valbool);
696#endif 697#endif
697 sock_valbool_flag(sk, SOCK_KEEPOPEN, valbool); 698 sock_valbool_flag(sk, SOCK_KEEPOPEN, valbool);
@@ -1458,6 +1459,7 @@ void sk_setup_caps(struct sock *sk, struct dst_entry *dst)
1458 } else { 1459 } else {
1459 sk->sk_route_caps |= NETIF_F_SG | NETIF_F_HW_CSUM; 1460 sk->sk_route_caps |= NETIF_F_SG | NETIF_F_HW_CSUM;
1460 sk->sk_gso_max_size = dst->dev->gso_max_size; 1461 sk->sk_gso_max_size = dst->dev->gso_max_size;
1462 sk->sk_gso_max_segs = dst->dev->gso_max_segs;
1461 } 1463 }
1462 } 1464 }
1463} 1465}
@@ -1522,7 +1524,14 @@ EXPORT_SYMBOL(sock_rfree);
1522 1524
1523void sock_edemux(struct sk_buff *skb) 1525void sock_edemux(struct sk_buff *skb)
1524{ 1526{
1525 sock_put(skb->sk); 1527 struct sock *sk = skb->sk;
1528
1529#ifdef CONFIG_INET
1530 if (sk->sk_state == TCP_TIME_WAIT)
1531 inet_twsk_put(inet_twsk(sk));
1532 else
1533#endif
1534 sock_put(sk);
1526} 1535}
1527EXPORT_SYMBOL(sock_edemux); 1536EXPORT_SYMBOL(sock_edemux);
1528 1537