aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/linux/netdevice.h4
-rw-r--r--include/net/ipip.h2
-rw-r--r--net/dccp/ipv4.c5
-rw-r--r--net/dccp/ipv6.c3
-rw-r--r--net/dccp/output.c14
-rw-r--r--net/ipv4/tcp_ipv4.c3
-rw-r--r--net/ipv4/tcp_output.c8
-rw-r--r--net/ipv6/ip6_tunnel.c2
-rw-r--r--net/ipv6/tcp_ipv6.c3
9 files changed, 14 insertions, 30 deletions
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 4e967b2e22cc..caa3c2593719 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -66,6 +66,10 @@ struct netpoll_info;
66#define NET_RX_CN_HIGH 4 /* The storm is here */ 66#define NET_RX_CN_HIGH 4 /* The storm is here */
67#define NET_RX_BAD 5 /* packet dropped due to kernel error */ 67#define NET_RX_BAD 5 /* packet dropped due to kernel error */
68 68
69/* NET_XMIT_CN is special. It does not guarantee that this packet is lost. It
70 * indicates that the device will soon be dropping packets, or already drops
71 * some packets of the same priority; prompting us to send less aggressively. */
72#define net_xmit_eval(e) ((e) == NET_XMIT_CN? 0 : (e))
69#define net_xmit_errno(e) ((e) != NET_XMIT_CN ? -ENOBUFS : 0) 73#define net_xmit_errno(e) ((e) != NET_XMIT_CN ? -ENOBUFS : 0)
70 74
71#endif 75#endif
diff --git a/include/net/ipip.h b/include/net/ipip.h
index f490c3cbe377..84058858eea7 100644
--- a/include/net/ipip.h
+++ b/include/net/ipip.h
@@ -35,7 +35,7 @@ struct ip_tunnel
35 ip_send_check(iph); \ 35 ip_send_check(iph); \
36 \ 36 \
37 err = NF_HOOK(PF_INET, NF_IP_LOCAL_OUT, skb, NULL, rt->u.dst.dev, dst_output);\ 37 err = NF_HOOK(PF_INET, NF_IP_LOCAL_OUT, skb, NULL, rt->u.dst.dev, dst_output);\
38 if (err == NET_XMIT_SUCCESS || err == NET_XMIT_CN) { \ 38 if (net_xmit_eval(err) == 0) { \
39 stats->tx_bytes += pkt_len; \ 39 stats->tx_bytes += pkt_len; \
40 stats->tx_packets++; \ 40 stats->tx_packets++; \
41 } else { \ 41 } else { \
diff --git a/net/dccp/ipv4.c b/net/dccp/ipv4.c
index bc400b2ba25e..61c09014dade 100644
--- a/net/dccp/ipv4.c
+++ b/net/dccp/ipv4.c
@@ -501,8 +501,7 @@ static int dccp_v4_send_response(struct sock *sk, struct request_sock *req,
501 err = ip_build_and_send_pkt(skb, sk, ireq->loc_addr, 501 err = ip_build_and_send_pkt(skb, sk, ireq->loc_addr,
502 ireq->rmt_addr, 502 ireq->rmt_addr,
503 ireq->opt); 503 ireq->opt);
504 if (err == NET_XMIT_CN) 504 err = net_xmit_eval(err);
505 err = 0;
506 } 505 }
507 506
508out: 507out:
@@ -571,7 +570,7 @@ static void dccp_v4_ctl_send_reset(struct sk_buff *rxskb)
571 rxskb->nh.iph->saddr, NULL); 570 rxskb->nh.iph->saddr, NULL);
572 bh_unlock_sock(dccp_v4_ctl_socket->sk); 571 bh_unlock_sock(dccp_v4_ctl_socket->sk);
573 572
574 if (err == NET_XMIT_CN || err == 0) { 573 if (net_xmit_eval(err) == 0) {
575 DCCP_INC_STATS_BH(DCCP_MIB_OUTSEGS); 574 DCCP_INC_STATS_BH(DCCP_MIB_OUTSEGS);
576 DCCP_INC_STATS_BH(DCCP_MIB_OUTRSTS); 575 DCCP_INC_STATS_BH(DCCP_MIB_OUTRSTS);
577 } 576 }
diff --git a/net/dccp/ipv6.c b/net/dccp/ipv6.c
index 8d6ddb6389a7..2165b1740c7c 100644
--- a/net/dccp/ipv6.c
+++ b/net/dccp/ipv6.c
@@ -294,8 +294,7 @@ static int dccp_v6_send_response(struct sock *sk, struct request_sock *req,
294 &ireq6->rmt_addr); 294 &ireq6->rmt_addr);
295 ipv6_addr_copy(&fl.fl6_dst, &ireq6->rmt_addr); 295 ipv6_addr_copy(&fl.fl6_dst, &ireq6->rmt_addr);
296 err = ip6_xmit(sk, skb, &fl, opt, 0); 296 err = ip6_xmit(sk, skb, &fl, opt, 0);
297 if (err == NET_XMIT_CN) 297 err = net_xmit_eval(err);
298 err = 0;
299 } 298 }
300 299
301done: 300done:
diff --git a/net/dccp/output.c b/net/dccp/output.c
index 0994b13f0f15..ef22f3cc791a 100644
--- a/net/dccp/output.c
+++ b/net/dccp/output.c
@@ -125,16 +125,7 @@ static int dccp_transmit_skb(struct sock *sk, struct sk_buff *skb)
125 125
126 memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt)); 126 memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt));
127 err = icsk->icsk_af_ops->queue_xmit(skb, sk, 0); 127 err = icsk->icsk_af_ops->queue_xmit(skb, sk, 0);
128 if (err <= 0) 128 return net_xmit_eval(err);
129 return err;
130
131 /* NET_XMIT_CN is special. It does not guarantee,
132 * that this packet is lost. It tells that device
133 * is about to start to drop packets or already
134 * drops some packets of the same priority and
135 * invokes us to send less aggressively.
136 */
137 return err == NET_XMIT_CN ? 0 : err;
138 } 129 }
139 return -ENOBUFS; 130 return -ENOBUFS;
140} 131}
@@ -426,8 +417,7 @@ int dccp_send_reset(struct sock *sk, enum dccp_reset_codes code)
426 if (skb != NULL) { 417 if (skb != NULL) {
427 memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt)); 418 memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt));
428 err = inet_csk(sk)->icsk_af_ops->queue_xmit(skb, sk, 0); 419 err = inet_csk(sk)->icsk_af_ops->queue_xmit(skb, sk, 0);
429 if (err == NET_XMIT_CN) 420 return net_xmit_eval(err);
430 err = 0;
431 } 421 }
432 } 422 }
433 423
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
index 2eb58844403c..0ad0904bf56c 100644
--- a/net/ipv4/tcp_ipv4.c
+++ b/net/ipv4/tcp_ipv4.c
@@ -662,8 +662,7 @@ static int tcp_v4_send_synack(struct sock *sk, struct request_sock *req,
662 err = ip_build_and_send_pkt(skb, sk, ireq->loc_addr, 662 err = ip_build_and_send_pkt(skb, sk, ireq->loc_addr,
663 ireq->rmt_addr, 663 ireq->rmt_addr,
664 ireq->opt); 664 ireq->opt);
665 if (err == NET_XMIT_CN) 665 err = net_xmit_eval(err);
666 err = 0;
667 } 666 }
668 667
669out: 668out:
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
index f63e99aac2d5..6a8581ab9a23 100644
--- a/net/ipv4/tcp_output.c
+++ b/net/ipv4/tcp_output.c
@@ -484,13 +484,7 @@ static int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, int clone_it,
484 484
485 tcp_enter_cwr(sk); 485 tcp_enter_cwr(sk);
486 486
487 /* NET_XMIT_CN is special. It does not guarantee, 487 return net_xmit_eval(err);
488 * that this packet is lost. It tells that device
489 * is about to start to drop packets or already
490 * drops some packets of the same priority and
491 * invokes us to send less aggressively.
492 */
493 return err == NET_XMIT_CN ? 0 : err;
494 488
495#undef SYSCTL_FLAG_TSTAMPS 489#undef SYSCTL_FLAG_TSTAMPS
496#undef SYSCTL_FLAG_WSCALE 490#undef SYSCTL_FLAG_WSCALE
diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
index 4919f9294e2a..80a11909159d 100644
--- a/net/ipv6/ip6_tunnel.c
+++ b/net/ipv6/ip6_tunnel.c
@@ -748,7 +748,7 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, struct net_device *dev)
748 err = NF_HOOK(PF_INET6, NF_IP6_LOCAL_OUT, skb, NULL, 748 err = NF_HOOK(PF_INET6, NF_IP6_LOCAL_OUT, skb, NULL,
749 skb->dst->dev, dst_output); 749 skb->dst->dev, dst_output);
750 750
751 if (err == NET_XMIT_SUCCESS || err == NET_XMIT_CN) { 751 if (net_xmit_eval(err) == 0) {
752 stats->tx_bytes += pkt_len; 752 stats->tx_bytes += pkt_len;
753 stats->tx_packets++; 753 stats->tx_packets++;
754 } else { 754 } else {
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
index 9a8e690fdf7c..9a88395a7629 100644
--- a/net/ipv6/tcp_ipv6.c
+++ b/net/ipv6/tcp_ipv6.c
@@ -502,8 +502,7 @@ static int tcp_v6_send_synack(struct sock *sk, struct request_sock *req,
502 502
503 ipv6_addr_copy(&fl.fl6_dst, &treq->rmt_addr); 503 ipv6_addr_copy(&fl.fl6_dst, &treq->rmt_addr);
504 err = ip6_xmit(sk, skb, &fl, opt, 0); 504 err = ip6_xmit(sk, skb, &fl, opt, 0);
505 if (err == NET_XMIT_CN) 505 err = net_xmit_eval(err);
506 err = 0;
507 } 506 }
508 507
509done: 508done: