diff options
Diffstat (limited to 'net/core/sock.c')
-rw-r--r-- | net/core/sock.c | 13 |
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 | ||
1523 | void sock_edemux(struct sk_buff *skb) | 1525 | void 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 | } |
1527 | EXPORT_SYMBOL(sock_edemux); | 1536 | EXPORT_SYMBOL(sock_edemux); |
1528 | 1537 | ||