diff options
Diffstat (limited to 'net/xfrm/xfrm_state.c')
-rw-r--r-- | net/xfrm/xfrm_state.c | 21 |
1 files changed, 1 insertions, 20 deletions
diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c index 290479d0746d..e845066547c4 100644 --- a/net/xfrm/xfrm_state.c +++ b/net/xfrm/xfrm_state.c | |||
@@ -372,8 +372,6 @@ static void xfrm_state_gc_task(struct work_struct *work) | |||
372 | 372 | ||
373 | hlist_for_each_entry_safe(x, tmp, &gc_list, gclist) | 373 | hlist_for_each_entry_safe(x, tmp, &gc_list, gclist) |
374 | xfrm_state_gc_destroy(x); | 374 | xfrm_state_gc_destroy(x); |
375 | |||
376 | wake_up(&net->xfrm.km_waitq); | ||
377 | } | 375 | } |
378 | 376 | ||
379 | static inline unsigned long make_jiffies(long secs) | 377 | static inline unsigned long make_jiffies(long secs) |
@@ -388,7 +386,6 @@ static enum hrtimer_restart xfrm_timer_handler(struct hrtimer * me) | |||
388 | { | 386 | { |
389 | struct tasklet_hrtimer *thr = container_of(me, struct tasklet_hrtimer, timer); | 387 | struct tasklet_hrtimer *thr = container_of(me, struct tasklet_hrtimer, timer); |
390 | struct xfrm_state *x = container_of(thr, struct xfrm_state, mtimer); | 388 | struct xfrm_state *x = container_of(thr, struct xfrm_state, mtimer); |
391 | struct net *net = xs_net(x); | ||
392 | unsigned long now = get_seconds(); | 389 | unsigned long now = get_seconds(); |
393 | long next = LONG_MAX; | 390 | long next = LONG_MAX; |
394 | int warn = 0; | 391 | int warn = 0; |
@@ -458,12 +455,8 @@ resched: | |||
458 | goto out; | 455 | goto out; |
459 | 456 | ||
460 | expired: | 457 | expired: |
461 | if (x->km.state == XFRM_STATE_ACQ && x->id.spi == 0) { | 458 | if (x->km.state == XFRM_STATE_ACQ && x->id.spi == 0) |
462 | x->km.state = XFRM_STATE_EXPIRED; | 459 | x->km.state = XFRM_STATE_EXPIRED; |
463 | wake_up(&net->xfrm.km_waitq); | ||
464 | next = 2; | ||
465 | goto resched; | ||
466 | } | ||
467 | 460 | ||
468 | err = __xfrm_state_delete(x); | 461 | err = __xfrm_state_delete(x); |
469 | if (!err) | 462 | if (!err) |
@@ -635,7 +628,6 @@ restart: | |||
635 | 628 | ||
636 | out: | 629 | out: |
637 | spin_unlock_bh(&net->xfrm.xfrm_state_lock); | 630 | spin_unlock_bh(&net->xfrm.xfrm_state_lock); |
638 | wake_up(&net->xfrm.km_waitq); | ||
639 | return err; | 631 | return err; |
640 | } | 632 | } |
641 | EXPORT_SYMBOL(xfrm_state_flush); | 633 | EXPORT_SYMBOL(xfrm_state_flush); |
@@ -948,8 +940,6 @@ static void __xfrm_state_insert(struct xfrm_state *x) | |||
948 | if (x->replay_maxage) | 940 | if (x->replay_maxage) |
949 | mod_timer(&x->rtimer, jiffies + x->replay_maxage); | 941 | mod_timer(&x->rtimer, jiffies + x->replay_maxage); |
950 | 942 | ||
951 | wake_up(&net->xfrm.km_waitq); | ||
952 | |||
953 | net->xfrm.state_num++; | 943 | net->xfrm.state_num++; |
954 | 944 | ||
955 | xfrm_hash_grow_check(net, x->bydst.next != NULL); | 945 | xfrm_hash_grow_check(net, x->bydst.next != NULL); |
@@ -1658,16 +1648,12 @@ EXPORT_SYMBOL(km_state_notify); | |||
1658 | 1648 | ||
1659 | void km_state_expired(struct xfrm_state *x, int hard, u32 portid) | 1649 | void km_state_expired(struct xfrm_state *x, int hard, u32 portid) |
1660 | { | 1650 | { |
1661 | struct net *net = xs_net(x); | ||
1662 | struct km_event c; | 1651 | struct km_event c; |
1663 | 1652 | ||
1664 | c.data.hard = hard; | 1653 | c.data.hard = hard; |
1665 | c.portid = portid; | 1654 | c.portid = portid; |
1666 | c.event = XFRM_MSG_EXPIRE; | 1655 | c.event = XFRM_MSG_EXPIRE; |
1667 | km_state_notify(x, &c); | 1656 | km_state_notify(x, &c); |
1668 | |||
1669 | if (hard) | ||
1670 | wake_up(&net->xfrm.km_waitq); | ||
1671 | } | 1657 | } |
1672 | 1658 | ||
1673 | EXPORT_SYMBOL(km_state_expired); | 1659 | EXPORT_SYMBOL(km_state_expired); |
@@ -1710,16 +1696,12 @@ EXPORT_SYMBOL(km_new_mapping); | |||
1710 | 1696 | ||
1711 | void km_policy_expired(struct xfrm_policy *pol, int dir, int hard, u32 portid) | 1697 | void km_policy_expired(struct xfrm_policy *pol, int dir, int hard, u32 portid) |
1712 | { | 1698 | { |
1713 | struct net *net = xp_net(pol); | ||
1714 | struct km_event c; | 1699 | struct km_event c; |
1715 | 1700 | ||
1716 | c.data.hard = hard; | 1701 | c.data.hard = hard; |
1717 | c.portid = portid; | 1702 | c.portid = portid; |
1718 | c.event = XFRM_MSG_POLEXPIRE; | 1703 | c.event = XFRM_MSG_POLEXPIRE; |
1719 | km_policy_notify(pol, dir, &c); | 1704 | km_policy_notify(pol, dir, &c); |
1720 | |||
1721 | if (hard) | ||
1722 | wake_up(&net->xfrm.km_waitq); | ||
1723 | } | 1705 | } |
1724 | EXPORT_SYMBOL(km_policy_expired); | 1706 | EXPORT_SYMBOL(km_policy_expired); |
1725 | 1707 | ||
@@ -2028,7 +2010,6 @@ int __net_init xfrm_state_init(struct net *net) | |||
2028 | INIT_WORK(&net->xfrm.state_hash_work, xfrm_hash_resize); | 2010 | INIT_WORK(&net->xfrm.state_hash_work, xfrm_hash_resize); |
2029 | INIT_HLIST_HEAD(&net->xfrm.state_gc_list); | 2011 | INIT_HLIST_HEAD(&net->xfrm.state_gc_list); |
2030 | INIT_WORK(&net->xfrm.state_gc_work, xfrm_state_gc_task); | 2012 | INIT_WORK(&net->xfrm.state_gc_work, xfrm_state_gc_task); |
2031 | init_waitqueue_head(&net->xfrm.km_waitq); | ||
2032 | spin_lock_init(&net->xfrm.xfrm_state_lock); | 2013 | spin_lock_init(&net->xfrm.xfrm_state_lock); |
2033 | return 0; | 2014 | return 0; |
2034 | 2015 | ||