===================================================================
@@ -1300,20 +1300,21 @@ int ip_push_pending_frames(struct sock *
/* Netfilter gets whole the not fragmented skb. */
err = ip_local_out(skb);
- if (err) {
- if (err > 0)
- err = inet->recverr ? net_xmit_errno(err) : 0;
- if (err)
- goto error;
+ if (err > 0) {
+ /* The packet was dropped by the network subsystem */
+ IP_INC_STATS(net, IPSTATS_MIB_OUTDISCARDS);
+
+ /*
+ * Errors are not passed on if the socket
+ * does not process errors (see IP_RECVERR).
+ * net_xmit_errno filters NET_XMIT_CN.
+ */
+ err = inet->recverr ? net_xmit_errno(err) : 0;
}
out:
ip_cork_release(inet);
return err;
-
-error:
- IP_INC_STATS(net, IPSTATS_MIB_OUTDISCARDS);
- goto out;
}
/*