diff options
Diffstat (limited to 'net/xfrm/xfrm_state.c')
-rw-r--r-- | net/xfrm/xfrm_state.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c index dc4a9f1fb941..23c92891758a 100644 --- a/net/xfrm/xfrm_state.c +++ b/net/xfrm/xfrm_state.c | |||
@@ -426,6 +426,12 @@ static void xfrm_put_mode(struct xfrm_mode *mode) | |||
426 | module_put(mode->owner); | 426 | module_put(mode->owner); |
427 | } | 427 | } |
428 | 428 | ||
429 | void xfrm_state_free(struct xfrm_state *x) | ||
430 | { | ||
431 | kmem_cache_free(xfrm_state_cache, x); | ||
432 | } | ||
433 | EXPORT_SYMBOL(xfrm_state_free); | ||
434 | |||
429 | static void xfrm_state_gc_destroy(struct xfrm_state *x) | 435 | static void xfrm_state_gc_destroy(struct xfrm_state *x) |
430 | { | 436 | { |
431 | tasklet_hrtimer_cancel(&x->mtimer); | 437 | tasklet_hrtimer_cancel(&x->mtimer); |
@@ -452,7 +458,7 @@ static void xfrm_state_gc_destroy(struct xfrm_state *x) | |||
452 | } | 458 | } |
453 | xfrm_dev_state_free(x); | 459 | xfrm_dev_state_free(x); |
454 | security_xfrm_state_free(x); | 460 | security_xfrm_state_free(x); |
455 | kmem_cache_free(xfrm_state_cache, x); | 461 | xfrm_state_free(x); |
456 | } | 462 | } |
457 | 463 | ||
458 | static void xfrm_state_gc_task(struct work_struct *work) | 464 | static void xfrm_state_gc_task(struct work_struct *work) |
@@ -788,7 +794,7 @@ void xfrm_sad_getinfo(struct net *net, struct xfrmk_sadinfo *si) | |||
788 | { | 794 | { |
789 | spin_lock_bh(&net->xfrm.xfrm_state_lock); | 795 | spin_lock_bh(&net->xfrm.xfrm_state_lock); |
790 | si->sadcnt = net->xfrm.state_num; | 796 | si->sadcnt = net->xfrm.state_num; |
791 | si->sadhcnt = net->xfrm.state_hmask; | 797 | si->sadhcnt = net->xfrm.state_hmask + 1; |
792 | si->sadhmcnt = xfrm_state_hashmax; | 798 | si->sadhmcnt = xfrm_state_hashmax; |
793 | spin_unlock_bh(&net->xfrm.xfrm_state_lock); | 799 | spin_unlock_bh(&net->xfrm.xfrm_state_lock); |
794 | } | 800 | } |