From 1697a2173154d4076dfea064bdd982318c2b7a8b Mon Sep 17 00:00:00 2001 From: jamal Date: Wed, 10 Feb 2010 23:51:27 +0000 Subject: [PATCH] --- yaml --- r: 184117 b: refs/heads/master c: 19f4c7133fc1b94001b997c4843d0a9192ee63e5 h: refs/heads/master i: 184115: 8ee44b79936d9fb3850f45a7873b318804283b06 v: v3 --- [refs] | 2 +- trunk/net/key/af_key.c | 2 +- trunk/net/xfrm/xfrm_state.c | 8 ++++++-- trunk/net/xfrm/xfrm_user.c | 2 +- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index faee5e103752..79037846f8a2 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 9546377c42e12513b33925ab829d893dcf521c5f +refs/heads/master: 19f4c7133fc1b94001b997c4843d0a9192ee63e5 diff --git a/trunk/net/key/af_key.c b/trunk/net/key/af_key.c index 79d2c0f3c334..9d47a6aa53dc 100644 --- a/trunk/net/key/af_key.c +++ b/trunk/net/key/af_key.c @@ -1751,7 +1751,7 @@ static int pfkey_flush(struct sock *sk, struct sk_buff *skb, struct sadb_msg *hd audit_info.secid = 0; err = xfrm_state_flush(net, proto, &audit_info); if (err) - return err; + return 0; c.data.proto = proto; c.seq = hdr->sadb_msg_seq; c.pid = hdr->sadb_msg_pid; diff --git a/trunk/net/xfrm/xfrm_state.c b/trunk/net/xfrm/xfrm_state.c index b36cc344474b..f50ee9badf47 100644 --- a/trunk/net/xfrm/xfrm_state.c +++ b/trunk/net/xfrm/xfrm_state.c @@ -603,13 +603,14 @@ xfrm_state_flush_secctx_check(struct net *net, u8 proto, struct xfrm_audit *audi int xfrm_state_flush(struct net *net, u8 proto, struct xfrm_audit *audit_info) { - int i, err = 0; + int i, err = 0, cnt = 0; spin_lock_bh(&xfrm_state_lock); err = xfrm_state_flush_secctx_check(net, proto, audit_info); if (err) goto out; + err = -ESRCH; for (i = 0; i <= net->xfrm.state_hmask; i++) { struct hlist_node *entry; struct xfrm_state *x; @@ -626,13 +627,16 @@ int xfrm_state_flush(struct net *net, u8 proto, struct xfrm_audit *audit_info) audit_info->sessionid, audit_info->secid); xfrm_state_put(x); + if (!err) + cnt++; spin_lock_bh(&xfrm_state_lock); goto restart; } } } - err = 0; + if (cnt) + err = 0; out: spin_unlock_bh(&xfrm_state_lock); diff --git a/trunk/net/xfrm/xfrm_user.c b/trunk/net/xfrm/xfrm_user.c index 943c8712bd97..7c8700447040 100644 --- a/trunk/net/xfrm/xfrm_user.c +++ b/trunk/net/xfrm/xfrm_user.c @@ -1525,7 +1525,7 @@ static int xfrm_flush_sa(struct sk_buff *skb, struct nlmsghdr *nlh, audit_info.secid = NETLINK_CB(skb).sid; err = xfrm_state_flush(net, p->proto, &audit_info); if (err) - return err; + return 0; c.data.proto = p->proto; c.event = nlh->nlmsg_type; c.seq = nlh->nlmsg_seq;