From 8e1cb1e8bbfc12a493f20dc046346913ed22a142 Mon Sep 17 00:00:00 2001 From: "David S. Miller" Date: Tue, 3 Oct 2006 16:00:26 -0700 Subject: [PATCH] --- yaml --- r: 38561 b: refs/heads/master c: ae8c05779ac2f286b872db9ebea0c3c0a031ad1e h: refs/heads/master i: 38559: 65347f0f6b57171b7bb939c91f7e41e49e73edb8 v: v3 --- [refs] | 2 +- trunk/net/xfrm/xfrm_policy.c | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 098807cc6bf2..4320eeae2a4f 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 667bbcb6c099d1b74f95c6963ddf37a32e7afc29 +refs/heads/master: ae8c05779ac2f286b872db9ebea0c3c0a031ad1e diff --git a/trunk/net/xfrm/xfrm_policy.c b/trunk/net/xfrm/xfrm_policy.c index b6e2e79d7261..2a7861661f14 100644 --- a/trunk/net/xfrm/xfrm_policy.c +++ b/trunk/net/xfrm/xfrm_policy.c @@ -778,8 +778,9 @@ void xfrm_policy_flush(u8 type) for (dir = 0; dir < XFRM_POLICY_MAX; dir++) { struct xfrm_policy *pol; struct hlist_node *entry; - int i; + int i, killed; + killed = 0; again1: hlist_for_each_entry(pol, entry, &xfrm_policy_inexact[dir], bydst) { @@ -790,6 +791,7 @@ void xfrm_policy_flush(u8 type) write_unlock_bh(&xfrm_policy_lock); xfrm_policy_kill(pol); + killed++; write_lock_bh(&xfrm_policy_lock); goto again1; @@ -807,13 +809,14 @@ void xfrm_policy_flush(u8 type) write_unlock_bh(&xfrm_policy_lock); xfrm_policy_kill(pol); + killed++; write_lock_bh(&xfrm_policy_lock); goto again2; } } - xfrm_policy_count[dir] = 0; + xfrm_policy_count[dir] -= killed; } atomic_inc(&flow_cache_genid); write_unlock_bh(&xfrm_policy_lock);