- 论坛徽章:
- 0
|
有点跑题
- /*
- * whynot kmem_cache ?
- * sisi 2007-8-10 01:57pm
- *
- * linux-2.6.22.1\net\xfrm\xfrm_state.c
- */
- static void xfrm_state_gc_destroy(struct xfrm_state *x)
- {
- del_timer_sync(&x->timer);
- del_timer_sync(&x->rtimer);
- kfree(x->aalg);
- kfree(x->ealg);
- kfree(x->calg);
- kfree(x->encap);
- kfree(x->coaddr); /* care of addr */
- if (x->mode)
- xfrm_put_mode(x->mode);
- if (x->type) {
- x->type->destructor(x);
- xfrm_put_type(x->type);
- }
- security_xfrm_state_free(x);
- //kfree(x);
- kmem_cache_free(xfrm_state_cache, x);
- }
- static struct kmem_cache *xfrm_state_cache __read_mostly;
- static int __init xfrm_state_slab_init(void)
- {
- xfrm_state_cache =
- kmem_cache_create("xfrm_state_cache",
- sizeof(struct xfrm_state), 0,
- SLAB_HWCACHE_ALIGN|SLAB_PANIC,
- NULL, NULL);
- return xfrm_state_cache ? 0 : -ENOMEM;
- }
- struct xfrm_state * xfrm_state_alloc(void)
- {
- struct xfrm_state *x;
- x = //kzalloc(sizeof(struct xfrm_state), GFP_ATOMIC);
- kmem_cache_alloc(xfrm_state_cache, GFP_ATOMIC);
- if (x) {
- atomic_set(&x->refcnt, 1);
- atomic_set(&x->tunnel_users, 0);
- INIT_HLIST_NODE(&x->bydst);
- INIT_HLIST_NODE(&x->bysrc);
- INIT_HLIST_NODE(&x->byspi);
-
- init_timer(&x->timer);
- x->timer.function = xfrm_timer_handler;
- x->timer.data = (unsigned long)x;
-
- init_timer(&x->rtimer);
- x->rtimer.function = xfrm_replay_timer_handler;
- x->rtimer.data = (unsigned long)x;
-
- x->curlft.add_time = get_seconds();
- x->lft.soft_byte_limit = XFRM_INF;
- x->lft.soft_packet_limit = XFRM_INF;
- x->lft.hard_byte_limit = XFRM_INF;
- x->lft.hard_packet_limit = XFRM_INF;
- x->replay_maxage = 0;
- x->replay_maxdiff = 0;
- spin_lock_init(&x->lock);
- }
- return x;
- }
- EXPORT_SYMBOL(xfrm_state_alloc);
复制代码 |
|