diff options
| author | Arnaldo Carvalho de Melo <acme@ghostprotocols.net> | 2005-08-09 22:49:02 -0400 | 
|---|---|---|
| committer | David S. Miller <davem@sunset.davemloft.net> | 2005-08-29 18:37:48 -0400 | 
| commit | 6cbb0df788b90777a7ed0f9d8261260353f48076 (patch) | |
| tree | 152b75c0279b8f612412f24a5ab35ab6d5a208d8 | |
| parent | 614c6cb4f225a7da9f13e5dd0fac3b531078eb9f (diff) | |
[SOCK]: Introduce sk_setup_caps
From tcp_v4_setup_caps, that always is preceded by a call to
__sk_dst_set, so coalesce this sequence into sk_setup_caps, removing
one call to a TCP function in the IP layer.
Signed-off-by: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
| -rw-r--r-- | include/net/sock.h | 10 | ||||
| -rw-r--r-- | include/net/tcp.h | 9 | ||||
| -rw-r--r-- | net/ipv4/ip_output.c | 7 | ||||
| -rw-r--r-- | net/ipv4/tcp_ipv4.c | 12 | ||||
| -rw-r--r-- | net/ipv4/tcp_minisocks.c | 1 | 
5 files changed, 17 insertions, 22 deletions
| diff --git a/include/net/sock.h b/include/net/sock.h index f91ee82522ff..69d869e41c35 100644 --- a/include/net/sock.h +++ b/include/net/sock.h | |||
| @@ -1025,6 +1025,16 @@ sk_dst_check(struct sock *sk, u32 cookie) | |||
| 1025 | return dst; | 1025 | return dst; | 
| 1026 | } | 1026 | } | 
| 1027 | 1027 | ||
| 1028 | static inline void sk_setup_caps(struct sock *sk, struct dst_entry *dst) | ||
| 1029 | { | ||
| 1030 | __sk_dst_set(sk, dst); | ||
| 1031 | sk->sk_route_caps = dst->dev->features; | ||
| 1032 | if (sk->sk_route_caps & NETIF_F_TSO) { | ||
| 1033 | if (sock_flag(sk, SOCK_NO_LARGESEND) || dst->header_len) | ||
| 1034 | sk->sk_route_caps &= ~NETIF_F_TSO; | ||
| 1035 | } | ||
| 1036 | } | ||
| 1037 | |||
| 1028 | static inline void sk_charge_skb(struct sock *sk, struct sk_buff *skb) | 1038 | static inline void sk_charge_skb(struct sock *sk, struct sk_buff *skb) | 
| 1029 | { | 1039 | { | 
| 1030 | sk->sk_wmem_queued += skb->truesize; | 1040 | sk->sk_wmem_queued += skb->truesize; | 
| diff --git a/include/net/tcp.h b/include/net/tcp.h index 31984733777b..d95661a3aeeb 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h | |||
| @@ -1658,15 +1658,6 @@ static inline int tcp_paws_check(const struct tcp_options_received *rx_opt, int | |||
| 1658 | return 1; | 1658 | return 1; | 
| 1659 | } | 1659 | } | 
| 1660 | 1660 | ||
| 1661 | static inline void tcp_v4_setup_caps(struct sock *sk, struct dst_entry *dst) | ||
| 1662 | { | ||
| 1663 | sk->sk_route_caps = dst->dev->features; | ||
| 1664 | if (sk->sk_route_caps & NETIF_F_TSO) { | ||
| 1665 | if (sock_flag(sk, SOCK_NO_LARGESEND) || dst->header_len) | ||
| 1666 | sk->sk_route_caps &= ~NETIF_F_TSO; | ||
| 1667 | } | ||
| 1668 | } | ||
| 1669 | |||
| 1670 | #define TCP_CHECK_TIMER(sk) do { } while (0) | 1661 | #define TCP_CHECK_TIMER(sk) do { } while (0) | 
| 1671 | 1662 | ||
| 1672 | static inline int tcp_use_frto(const struct sock *sk) | 1663 | static inline int tcp_use_frto(const struct sock *sk) | 
| diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c index c934f5316c3b..c72fc878f06d 100644 --- a/net/ipv4/ip_output.c +++ b/net/ipv4/ip_output.c | |||
| @@ -69,13 +69,10 @@ | |||
| 69 | #include <net/ip.h> | 69 | #include <net/ip.h> | 
| 70 | #include <net/protocol.h> | 70 | #include <net/protocol.h> | 
| 71 | #include <net/route.h> | 71 | #include <net/route.h> | 
| 72 | #include <net/tcp.h> | ||
| 73 | #include <net/udp.h> | ||
| 74 | #include <linux/skbuff.h> | 72 | #include <linux/skbuff.h> | 
| 75 | #include <net/sock.h> | 73 | #include <net/sock.h> | 
| 76 | #include <net/arp.h> | 74 | #include <net/arp.h> | 
| 77 | #include <net/icmp.h> | 75 | #include <net/icmp.h> | 
| 78 | #include <net/raw.h> | ||
| 79 | #include <net/checksum.h> | 76 | #include <net/checksum.h> | 
| 80 | #include <net/inetpeer.h> | 77 | #include <net/inetpeer.h> | 
| 81 | #include <net/checksum.h> | 78 | #include <net/checksum.h> | 
| @@ -84,6 +81,7 @@ | |||
| 84 | #include <linux/netfilter_bridge.h> | 81 | #include <linux/netfilter_bridge.h> | 
| 85 | #include <linux/mroute.h> | 82 | #include <linux/mroute.h> | 
| 86 | #include <linux/netlink.h> | 83 | #include <linux/netlink.h> | 
| 84 | #include <linux/tcp.h> | ||
| 87 | 85 | ||
| 88 | /* | 86 | /* | 
| 89 | * Shall we try to damage output packets if routing dev changes? | 87 | * Shall we try to damage output packets if routing dev changes? | 
| @@ -329,8 +327,7 @@ int ip_queue_xmit(struct sk_buff *skb, int ipfragok) | |||
| 329 | if (ip_route_output_flow(&rt, &fl, sk, 0)) | 327 | if (ip_route_output_flow(&rt, &fl, sk, 0)) | 
| 330 | goto no_route; | 328 | goto no_route; | 
| 331 | } | 329 | } | 
| 332 | __sk_dst_set(sk, &rt->u.dst); | 330 | sk_setup_caps(sk, &rt->u.dst); | 
| 333 | tcp_v4_setup_caps(sk, &rt->u.dst); | ||
| 334 | } | 331 | } | 
| 335 | skb->dst = dst_clone(&rt->u.dst); | 332 | skb->dst = dst_clone(&rt->u.dst); | 
| 336 | 333 | ||
| diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index c7c99d336368..4a5daecbd2ac 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c | |||
| @@ -837,8 +837,7 @@ int tcp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len) | |||
| 837 | goto failure; | 837 | goto failure; | 
| 838 | 838 | ||
| 839 | /* OK, now commit destination to socket. */ | 839 | /* OK, now commit destination to socket. */ | 
| 840 | __sk_dst_set(sk, &rt->u.dst); | 840 | sk_setup_caps(sk, &rt->u.dst); | 
| 841 | tcp_v4_setup_caps(sk, &rt->u.dst); | ||
| 842 | 841 | ||
| 843 | if (!tp->write_seq) | 842 | if (!tp->write_seq) | 
| 844 | tp->write_seq = secure_tcp_sequence_number(inet->saddr, | 843 | tp->write_seq = secure_tcp_sequence_number(inet->saddr, | 
| @@ -1553,8 +1552,7 @@ struct sock *tcp_v4_syn_recv_sock(struct sock *sk, struct sk_buff *skb, | |||
| 1553 | if (!newsk) | 1552 | if (!newsk) | 
| 1554 | goto exit; | 1553 | goto exit; | 
| 1555 | 1554 | ||
| 1556 | newsk->sk_dst_cache = dst; | 1555 | sk_setup_caps(newsk, dst); | 
| 1557 | tcp_v4_setup_caps(newsk, dst); | ||
| 1558 | 1556 | ||
| 1559 | newtp = tcp_sk(newsk); | 1557 | newtp = tcp_sk(newsk); | 
| 1560 | newinet = inet_sk(newsk); | 1558 | newinet = inet_sk(newsk); | 
| @@ -1855,8 +1853,7 @@ static int tcp_v4_reselect_saddr(struct sock *sk) | |||
| 1855 | if (err) | 1853 | if (err) | 
| 1856 | return err; | 1854 | return err; | 
| 1857 | 1855 | ||
| 1858 | __sk_dst_set(sk, &rt->u.dst); | 1856 | sk_setup_caps(sk, &rt->u.dst); | 
| 1859 | tcp_v4_setup_caps(sk, &rt->u.dst); | ||
| 1860 | 1857 | ||
| 1861 | new_saddr = rt->rt_src; | 1858 | new_saddr = rt->rt_src; | 
| 1862 | 1859 | ||
| @@ -1914,8 +1911,7 @@ int tcp_v4_rebuild_header(struct sock *sk) | |||
| 1914 | err = ip_route_output_flow(&rt, &fl, sk, 0); | 1911 | err = ip_route_output_flow(&rt, &fl, sk, 0); | 
| 1915 | } | 1912 | } | 
| 1916 | if (!err) { | 1913 | if (!err) { | 
| 1917 | __sk_dst_set(sk, &rt->u.dst); | 1914 | sk_setup_caps(sk, &rt->u.dst); | 
| 1918 | tcp_v4_setup_caps(sk, &rt->u.dst); | ||
| 1919 | return 0; | 1915 | return 0; | 
| 1920 | } | 1916 | } | 
| 1921 | 1917 | ||
| diff --git a/net/ipv4/tcp_minisocks.c b/net/ipv4/tcp_minisocks.c index f8e288c8d693..7c46a553c4af 100644 --- a/net/ipv4/tcp_minisocks.c +++ b/net/ipv4/tcp_minisocks.c | |||
| @@ -711,6 +711,7 @@ struct sock *tcp_create_openreq_child(struct sock *sk, struct request_sock *req, | |||
| 711 | bh_lock_sock(newsk); | 711 | bh_lock_sock(newsk); | 
| 712 | 712 | ||
| 713 | rwlock_init(&newsk->sk_dst_lock); | 713 | rwlock_init(&newsk->sk_dst_lock); | 
| 714 | newsk->sk_dst_cache = NULL; | ||
| 714 | atomic_set(&newsk->sk_rmem_alloc, 0); | 715 | atomic_set(&newsk->sk_rmem_alloc, 0); | 
| 715 | skb_queue_head_init(&newsk->sk_receive_queue); | 716 | skb_queue_head_init(&newsk->sk_receive_queue); | 
| 716 | atomic_set(&newsk->sk_wmem_alloc, 0); | 717 | atomic_set(&newsk->sk_wmem_alloc, 0); | 
