summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2011-05-06 15:02:07 -0700
committerDavid S. Miller <davem@davemloft.net>2011-05-06 15:37:57 -0700
commitbdc712b4c2baf9515887de3a52e7ecd89fafc0c7 (patch)
tree3ce09227fb75593256403eaa459d178a2668db25 /include
parentad638bd16d91012a512979327b5c17c867d260c6 (diff)
downloadlinux-stable-bdc712b4c2baf9515887de3a52e7ecd89fafc0c7.tar.gz
linux-stable-bdc712b4c2baf9515887de3a52e7ecd89fafc0c7.tar.bz2
linux-stable-bdc712b4c2baf9515887de3a52e7ecd89fafc0c7.zip
inet: Decrease overhead of on-stack inet_cork.
When we fast path datagram sends to avoid locking by putting the inet_cork on the stack we use up lots of space that isn't necessary. This is because inet_cork contains a "struct flowi" which isn't used in these code paths. Split inet_cork to two parts, "inet_cork" and "inet_cork_full". Only the latter of which has the "struct flowi" and is what is stored in inet_sock. Signed-off-by: David S. Miller <davem@davemloft.net> Acked-by: Eric Dumazet <eric.dumazet@gmail.com>
Diffstat (limited to 'include')
-rw-r--r--include/net/inet_sock.h12
-rw-r--r--include/net/ip.h2
2 files changed, 9 insertions, 5 deletions
diff --git a/include/net/inet_sock.h b/include/net/inet_sock.h
index ed2ba6eca724..caaff5f5f39f 100644
--- a/include/net/inet_sock.h
+++ b/include/net/inet_sock.h
@@ -96,17 +96,21 @@ static inline struct inet_request_sock *inet_rsk(const struct request_sock *sk)
struct inet_cork {
unsigned int flags;
- unsigned int fragsize;
+ __be32 addr;
struct ip_options *opt;
+ unsigned int fragsize;
struct dst_entry *dst;
int length; /* Total length of all frames */
- __be32 addr;
- struct flowi fl;
struct page *page;
u32 off;
u8 tx_flags;
};
+struct inet_cork_full {
+ struct inet_cork base;
+ struct flowi fl;
+};
+
struct ip_mc_socklist;
struct ipv6_pinfo;
struct rtable;
@@ -164,7 +168,7 @@ struct inet_sock {
int mc_index;
__be32 mc_addr;
struct ip_mc_socklist __rcu *mc_list;
- struct inet_cork cork;
+ struct inet_cork_full cork;
};
#define IPCORK_OPT 1 /* ip-options has been held in ipcork.opt */
diff --git a/include/net/ip.h b/include/net/ip.h
index 3a59bf99aa3a..095e392d5f16 100644
--- a/include/net/ip.h
+++ b/include/net/ip.h
@@ -132,7 +132,7 @@ extern struct sk_buff *ip_make_skb(struct sock *sk,
static inline struct sk_buff *ip_finish_skb(struct sock *sk)
{
- return __ip_make_skb(sk, &sk->sk_write_queue, &inet_sk(sk)->cork);
+ return __ip_make_skb(sk, &sk->sk_write_queue, &inet_sk(sk)->cork.base);
}
/* datagram.c */