audit_info.secid = 0;
        err = xfrm_state_flush(net, proto, &audit_info);
        if (err)
-               return 0;
+               return err;
        c.data.proto = proto;
        c.seq = hdr->sadb_msg_seq;
        c.pid = hdr->sadb_msg_pid;
        audit_info.secid = 0;
        err = xfrm_policy_flush(net, XFRM_POLICY_TYPE_MAIN, &audit_info);
        if (err)
-               return 0;
+               return err;
        c.data.type = XFRM_POLICY_TYPE_MAIN;
        c.event = XFRM_MSG_FLUSHPOLICY;
        c.pid = hdr->sadb_msg_pid;
 
 
 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);
 
                                     &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,
                                             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,
                }
 
        }
-       if (!cnt)
-               err = -ESRCH;
        atomic_inc(&flow_cache_genid);
 out:
        write_unlock_bh(&xfrm_policy_lock);
 
 
 int xfrm_state_flush(struct net *net, u8 proto, struct xfrm_audit *audit_info)
 {
-       int i, err = 0, cnt = 0;
+       int i, err = 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;
                                                        audit_info->sessionid,
                                                        audit_info->secid);
                                xfrm_state_put(x);
-                               if (!err)
-                                       cnt++;
 
                                spin_lock_bh(&xfrm_state_lock);
                                goto restart;
                        }
                }
        }
-       if (cnt)
-               err = 0;
+       err = 0;
 
 out:
        spin_unlock_bh(&xfrm_state_lock);
 
        audit_info.secid = NETLINK_CB(skb).sid;
        err = xfrm_state_flush(net, p->proto, &audit_info);
        if (err)
-               return 0;
+               return err;
        c.data.proto = p->proto;
        c.event = nlh->nlmsg_type;
        c.seq = nlh->nlmsg_seq;
        audit_info.secid = NETLINK_CB(skb).sid;
        err = xfrm_policy_flush(net, type, &audit_info);
        if (err)
-               return 0;
+               return err;
        c.data.type = type;
        c.event = nlh->nlmsg_type;
        c.seq = nlh->nlmsg_seq;