diff options
author | Eric Dumazet <eric.dumazet@gmail.com> | 2010-06-16 00:52:13 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-06-16 14:55:39 -0400 |
commit | 317fe0e6c5dc9448bcef41a2e31fecfd3dba7f55 (patch) | |
tree | c2a042e1c8bb96b7fdeadf658309ead1b6e8dabc /net/ipv4/route.c | |
parent | fdb93f8ac39aa5902f3d264edd50dffcabfdd13b (diff) |
inetpeer: restore small inet_peer structures
Addition of rcu_head to struct inet_peer added 16bytes on 64bit arches.
Thats a bit unfortunate, since old size was exactly 64 bytes.
This can be solved, using an union between this rcu_head an four fields,
that are normally used only when a refcount is taken on inet_peer.
rcu_head is used only when refcnt=-1, right before structure freeing.
Add a inet_peer_refcheck() function to check this assertion for a while.
We can bring back SLAB_HWCACHE_ALIGN qualifier in kmem cache creation.
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/route.c')
-rw-r--r-- | net/ipv4/route.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/net/ipv4/route.c b/net/ipv4/route.c index a291edbbc97f..03430de46166 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c | |||
@@ -2881,6 +2881,7 @@ static int rt_fill_info(struct net *net, | |||
2881 | error = rt->dst.error; | 2881 | error = rt->dst.error; |
2882 | expires = rt->dst.expires ? rt->dst.expires - jiffies : 0; | 2882 | expires = rt->dst.expires ? rt->dst.expires - jiffies : 0; |
2883 | if (rt->peer) { | 2883 | if (rt->peer) { |
2884 | inet_peer_refcheck(rt->peer); | ||
2884 | id = atomic_read(&rt->peer->ip_id_count) & 0xffff; | 2885 | id = atomic_read(&rt->peer->ip_id_count) & 0xffff; |
2885 | if (rt->peer->tcp_ts_stamp) { | 2886 | if (rt->peer->tcp_ts_stamp) { |
2886 | ts = rt->peer->tcp_ts; | 2887 | ts = rt->peer->tcp_ts; |