All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andreas Schultz <aschultz@tpip.net>
To: Jiri Benc <jbenc@redhat.com>
Cc: netdev@vger.kernel.org, Pravin B Shelar <pshelar@nicira.com>,
	"David S. Miller" <davem@davemloft.net>
Subject: Re: [PATCH net v2] fix return of iptunnel_xmit
Date: Thu, 8 Oct 2015 17:33:54 +0200	[thread overview]
Message-ID: <56168CE2.6060208@tpip.net> (raw)
In-Reply-To: <20151008170849.22bc8632@griffin>

On 10/08/2015 05:08 PM, Jiri Benc wrote:
> On Thu,  8 Oct 2015 12:11:54 +0200, Andreas Schultz wrote:
>> All users of iptunnel_xmit expect the return value to be the error
>> code from ip_output_local, but currently the return value is length
>> of the send data on success or zero on error.
>> Change iptunnel_xmit returns to match the callers expectation.
>
> That's not true. All users pass the returned value to
> iptunnel_xmit_stats() where it is used to increase tx_bytes.

Yes, but iptunnel_xmit_stats() basically has three different counters:

  1. count packets and bytes when err > 0
  2. count tx_errors when err < 0
  3. count tx_dropped when err == 0

Case 2 got lost in cset 0e6fbc5b6c6218987c93b8c7ca60cf786062899d, since
the return value of iptunnel_xmit() can only be >= 0.

I tried to find out if ip_local_out_sk() can ever return a negative
value. If it can't then iptunnel_xmit_stats() could be simplified and
tipc_udp_send_msg should be fixed.

I've reread my change, and it I do have messed up the non-error case.
pkt_len should be returned when ip_local_out_sk returns NET_XMIT_SUCCESS
or NET_XMIT_CN, 0 when err > 0 and err when err < 0.

Like this:

diff --git a/net/ipv4/ip_tunnel_core.c b/net/ipv4/ip_tunnel_core.c
index 84dce6a..5cced3b 100644
--- a/net/ipv4/ip_tunnel_core.c
+++ b/net/ipv4/ip_tunnel_core.c
@@ -80,9 +80,12 @@ int iptunnel_xmit(struct sock *sk, struct rtable *rt, struct sk_buff *skb,
                           skb_shinfo(skb)->gso_segs ?: 1);

         err = ip_local_out_sk(sk, skb);
-       if (unlikely(net_xmit_eval(err)))
-               pkt_len = 0;
-       return pkt_len;
+       if (likely(net_xmit_eval(err) == 0))
+               return pkt_len;
+       if (err < 0)
+               return err;
+
+       return 0;
  }
  EXPORT_SYMBOL_GPL(iptunnel_xmit);

Andreas

>
> The only exception is tipc_udp_send_msg which should be fixed instead.
>
>   Jiri
>

  reply	other threads:[~2015-10-08 15:33 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-08 10:11 [PATCH net v2] fix return of iptunnel_xmit Andreas Schultz
2015-10-08 15:08 ` Jiri Benc
2015-10-08 15:33   ` Andreas Schultz [this message]
2015-10-08 15:39     ` Jiri Benc

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=56168CE2.6060208@tpip.net \
    --to=aschultz@tpip.net \
    --cc=davem@davemloft.net \
    --cc=jbenc@redhat.com \
    --cc=netdev@vger.kernel.org \
    --cc=pshelar@nicira.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.