Patchwork [1/1] net: ipv4: refine the logic for determining daddr in ip_queue_xmit.

login
register
mail settings
Submitter Harvey Yang
Date Jan. 15, 2013, 4:47 a.m.
Message ID <1358225255-30973-1-git-send-email-harvey.huawei.yang@gmail.com>
Download mbox | patch
Permalink /patch/211991/
State Rejected
Delegated to: David Miller
Headers show

Comments

Harvey Yang - Jan. 15, 2013, 4:47 a.m.
The destination address daddr is faddr if source route option is set, otherwise it is inet_daddr. So use if-else to assign the value.

Signed-off-by: Harvey Yang <harvey.huawei.yang@gmail.com>
---
 net/ipv4/ip_output.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)
David Miller - Jan. 15, 2013, 4:48 a.m.
From: Harvey Yang <harvey.huawei.yang@gmail.com>
Date: Tue, 15 Jan 2013 12:47:35 +0800

> The destination address daddr is faddr if source route option is set, otherwise it is inet_daddr. So use if-else to assign the value.
> 
> Signed-off-by: Harvey Yang <harvey.huawei.yang@gmail.com>

You are changing nothing in how this code behaves.  And stylistically
I know it was coded this way on purpose, because I'm pretty sure I
wrote it.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Eric Dumazet - Jan. 15, 2013, 4:57 a.m.
On Tue, 2013-01-15 at 12:47 +0800, Harvey Yang wrote:
> The destination address daddr is faddr if source route option is set, otherwise it is inet_daddr. So use if-else to assign the value.
> 
> Signed-off-by: Harvey Yang <harvey.huawei.yang@gmail.com>
> ---
>  net/ipv4/ip_output.c |    4 ++--
>  1 files changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c
> index 3e98ed2..22b738c 100644
> --- a/net/ipv4/ip_output.c
> +++ b/net/ipv4/ip_output.c
> @@ -349,10 +349,10 @@ int ip_queue_xmit(struct sk_buff *skb, struct flowi *fl)
>  		__be32 daddr;
>  
>  		/* Use correct destination address if we have options. */
> -		daddr = inet->inet_daddr;
>  		if (inet_opt && inet_opt->opt.srr)
>  			daddr = inet_opt->opt.faddr;
> -
> +		else
> +			daddr = inet->inet_daddr;
>  		/* If this fails, retransmit mechanism of transport layer will
>  		 * keep trying until route appears or the connection times
>  		 * itself out.

Current code is faster, srr is not often used.



--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Cong Ding - Jan. 15, 2013, 10:12 a.m.
On Mon, Jan 14, 2013 at 08:57:09PM -0800, Eric Dumazet wrote:
> On Tue, 2013-01-15 at 12:47 +0800, Harvey Yang wrote:
> > The destination address daddr is faddr if source route option is set, otherwise it is inet_daddr. So use if-else to assign the value.
> > 
> > Signed-off-by: Harvey Yang <harvey.huawei.yang@gmail.com>
> > ---
> >  net/ipv4/ip_output.c |    4 ++--
> >  1 files changed, 2 insertions(+), 2 deletions(-)
> > 
> > diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c
> > index 3e98ed2..22b738c 100644
> > --- a/net/ipv4/ip_output.c
> > +++ b/net/ipv4/ip_output.c
> > @@ -349,10 +349,10 @@ int ip_queue_xmit(struct sk_buff *skb, struct flowi *fl)
> >  		__be32 daddr;
> >  
> >  		/* Use correct destination address if we have options. */
> > -		daddr = inet->inet_daddr;
> >  		if (inet_opt && inet_opt->opt.srr)
> >  			daddr = inet_opt->opt.faddr;
> > -
> > +		else
> > +			daddr = inet->inet_daddr;
> >  		/* If this fails, retransmit mechanism of transport layer will
> >  		 * keep trying until route appears or the connection times
> >  		 * itself out.
> 
> Current code is faster, srr is not often used.
If you turn on O2 option in GCC, both versions behave the same (generate same
binary code). If srr is not often used, why not use unlikely() macro?
- cong

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c
index 3e98ed2..22b738c 100644
--- a/net/ipv4/ip_output.c
+++ b/net/ipv4/ip_output.c
@@ -349,10 +349,10 @@  int ip_queue_xmit(struct sk_buff *skb, struct flowi *fl)
 		__be32 daddr;
 
 		/* Use correct destination address if we have options. */
-		daddr = inet->inet_daddr;
 		if (inet_opt && inet_opt->opt.srr)
 			daddr = inet_opt->opt.faddr;
-
+		else
+			daddr = inet->inet_daddr;
 		/* If this fails, retransmit mechanism of transport layer will
 		 * keep trying until route appears or the connection times
 		 * itself out.