xfrm: Revert false event eliding commits.
As reported by Alexey Dobriyan: -------------------- setkey now takes several seconds to run this simple script and it spits "recv: Resource temporarily unavailable" messages. #!/usr/sbin/setkey -f flush; spdflush; add A B ipcomp 44 -m tunnel -C deflate; add B A ipcomp 45 -m tunnel -C deflate; spdadd A B any -P in ipsec ipcomp/tunnel/192.168.1.2-192.168.1.3/use; spdadd B A any -P out ipsec ipcomp/tunnel/192.168.1.3-192.168.1.2/use; -------------------- Obviously applications want the events even when the table is empty. So we cannot make this behavioral change. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -771,8 +771,7 @@ xfrm_policy_flush_secctx_check(struct net *net, u8 type, struct xfrm_audit *audi
|
||||
|
||||
int xfrm_policy_flush(struct net *net, u8 type, struct xfrm_audit *audit_info)
|
||||
{
|
||||
int dir, err = 0, cnt = 0;
|
||||
struct xfrm_policy *dp;
|
||||
int dir, err = 0;
|
||||
|
||||
write_lock_bh(&xfrm_policy_lock);
|
||||
|
||||
@@ -790,10 +789,8 @@ int xfrm_policy_flush(struct net *net, u8 type, struct xfrm_audit *audit_info)
|
||||
&net->xfrm.policy_inexact[dir], bydst) {
|
||||
if (pol->type != type)
|
||||
continue;
|
||||
dp = __xfrm_policy_unlink(pol, dir);
|
||||
__xfrm_policy_unlink(pol, dir);
|
||||
write_unlock_bh(&xfrm_policy_lock);
|
||||
if (dp)
|
||||
cnt++;
|
||||
|
||||
xfrm_audit_policy_delete(pol, 1, audit_info->loginuid,
|
||||
audit_info->sessionid,
|
||||
@@ -812,10 +809,8 @@ int xfrm_policy_flush(struct net *net, u8 type, struct xfrm_audit *audit_info)
|
||||
bydst) {
|
||||
if (pol->type != type)
|
||||
continue;
|
||||
dp = __xfrm_policy_unlink(pol, dir);
|
||||
__xfrm_policy_unlink(pol, dir);
|
||||
write_unlock_bh(&xfrm_policy_lock);
|
||||
if (dp)
|
||||
cnt++;
|
||||
|
||||
xfrm_audit_policy_delete(pol, 1,
|
||||
audit_info->loginuid,
|
||||
@@ -829,8 +824,6 @@ int xfrm_policy_flush(struct net *net, u8 type, struct xfrm_audit *audit_info)
|
||||
}
|
||||
|
||||
}
|
||||
if (!cnt)
|
||||
err = -ESRCH;
|
||||
atomic_inc(&flow_cache_genid);
|
||||
out:
|
||||
write_unlock_bh(&xfrm_policy_lock);
|
||||
|
Reference in New Issue
Block a user