Make inet_twsk_put similar to sock_put
Subsystems (3)
PATCH 1/1 Make inet_twsk_put similar to sock_put
By separating the freeing code from the refcounting decrementing. Probably reducing icache pressure when we still have reference counts to go.
Signed-off-by Arnaldo Carvalho de Melo <[email protected]>
net/ipv4/inet_timewait_sock.c +13 -10
@@ -49,19 +49,22 @@ static void __inet_twsk_kill(struct inet_timewait_sock *tw,inet_twsk_put (tw); } -void inet_twsk_put (struct inet_timewait_sock *tw) +static noinline void inet_twsk_free(struct inet_timewait_sock *tw) { -if (atomic_dec_and_test (&tw->tw_refcnt)) { -struct module *owner = tw->tw_prot->owner; -twsk_destructor ((struct sock *)tw); +struct module *owner = tw->tw_prot->owner; +twsk_destructor ((struct sock *)tw);#ifdef SOCK_REFCNT_DEBUG -printk (KERN_DEBUG "%s timewait_sock %p released\n" , - tw->tw_prot->name, tw); +pr_debug ("%s timewait_sock %p released\n" , tw->tw_prot->name, tw);#endif -release_net (twsk_net (tw)); -kmem_cache_free (tw->tw_prot->twsk_prot->twsk_slab, tw); -module_put (owner); - } +release_net (twsk_net (tw)); +kmem_cache_free (tw->tw_prot->twsk_prot->twsk_slab, tw); +module_put (owner); +} + +void inet_twsk_put (struct inet_timewait_sock *tw) +{ +if (atomic_dec_and_test (&tw->tw_refcnt)) +inet_twsk_free (tw); }EXPORT_SYMBOL_GPL (inet_twsk_put);
From: Arnaldo Carvalho de Melo <[email protected]>
Date: Wed, 6 May 2009 01:48:19 -0300
Quoted 5 lines
By separating the freeing code from the refcounting decrementing. Probably reducing icache pressure when we still have reference counts to go.
Signed-off-by Arnaldo Carvalho de Melo <[email protected]>
Applied to net-next-2.6, thanks!