Skip to content

Commit

Permalink
ip_tunnel: embed hash list head
Browse files Browse the repository at this point in the history
The IP tunnel hash heads can be embedded in the per-net structure
since it is a fixed size. Reduce the size so that the total structure
fits in a page size. The original size was overly large, even NETDEV_HASHBITS
is only 8 bits!

Also, add some white space for readability.

Signed-off-by: Stephen Hemminger <[email protected]>
Acked-by: Pravin B Shelar <[email protected]>.
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
shemminger authored and davem330 committed Aug 7, 2013
1 parent 8a56d24 commit 6261d98
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 9 deletions.
4 changes: 2 additions & 2 deletions include/net/ip_tunnels.h
Original file line number Diff line number Diff line change
Expand Up @@ -86,12 +86,12 @@ struct tnl_ptk_info {
#define PACKET_RCVD 0
#define PACKET_REJECT 1

#define IP_TNL_HASH_BITS 10
#define IP_TNL_HASH_BITS 7
#define IP_TNL_HASH_SIZE (1 << IP_TNL_HASH_BITS)

struct ip_tunnel_net {
struct hlist_head *tunnels;
struct net_device *fb_tunnel_dev;
struct hlist_head tunnels[IP_TNL_HASH_SIZE];
};

#ifdef CONFIG_INET
Expand Down
13 changes: 6 additions & 7 deletions net/ipv4/ip_tunnel.c
Original file line number Diff line number Diff line change
Expand Up @@ -838,26 +838,26 @@ int ip_tunnel_init_net(struct net *net, int ip_tnl_net_id,
{
struct ip_tunnel_net *itn = net_generic(net, ip_tnl_net_id);
struct ip_tunnel_parm parms;
unsigned int i;

itn->tunnels = kzalloc(IP_TNL_HASH_SIZE * sizeof(struct hlist_head), GFP_KERNEL);
if (!itn->tunnels)
return -ENOMEM;
for (i = 0; i < IP_TNL_HASH_SIZE; i++)
INIT_HLIST_HEAD(&itn->tunnels[i]);

if (!ops) {
itn->fb_tunnel_dev = NULL;
return 0;
}

memset(&parms, 0, sizeof(parms));
if (devname)
strlcpy(parms.name, devname, IFNAMSIZ);

rtnl_lock();
itn->fb_tunnel_dev = __ip_tunnel_create(net, ops, &parms);
rtnl_unlock();
if (IS_ERR(itn->fb_tunnel_dev)) {
kfree(itn->tunnels);

if (IS_ERR(itn->fb_tunnel_dev))
return PTR_ERR(itn->fb_tunnel_dev);
}

return 0;
}
Expand Down Expand Up @@ -887,7 +887,6 @@ void ip_tunnel_delete_net(struct ip_tunnel_net *itn)
ip_tunnel_destroy(itn, &list);
unregister_netdevice_many(&list);
rtnl_unlock();
kfree(itn->tunnels);
}
EXPORT_SYMBOL_GPL(ip_tunnel_delete_net);

Expand Down

0 comments on commit 6261d98

Please sign in to comment.