All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Ahern <dsahern@gmail.com>
To: John Fastabend <john.fastabend@gmail.com>,
	Roopa Prabhu <roopa@cumulusnetworks.com>,
	davem@davemloft.net, rami.rosen@intel.com
Cc: netdev@vger.kernel.org, nikolay@cumulusnetworks.com
Subject: Re: [PATCH net-next v2 4/8] net: ipv4: Convert inet_rtm_getroute to rcu versions of route lookup
Date: Wed, 31 May 2017 15:48:58 -0600	[thread overview]
Message-ID: <d3fa47fd-e717-88c0-701d-a408d9ad5207@gmail.com> (raw)
In-Reply-To: <592F2373.7070909@gmail.com>

On 5/31/17 2:11 PM, John Fastabend wrote:
>> @@ -2721,14 +2724,14 @@ static int inet_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh,
>>  		skb->protocol	= htons(ETH_P_IP);
>>  		skb->dev	= dev;
>>  		skb->mark	= mark;
>> -		err = ip_route_input(skb, dst, src, rtm->rtm_tos, dev);
>> +		err = ip_route_input_rcu(skb, dst, src, rtm->rtm_tos,
>> +					 dev, &res);
>>  
>>  		rt = skb_rtable(skb);
>>  		if (err == 0 && rt->dst.error)
>>  			err = -rt->dst.error;
>>  	} else {
>> -		rt = ip_route_output_key(net, &fl4);
>> -
>> +		rt = ip_route_output_key_hash_rcu(net, &fl4, &res, skb);
>>  		err = 0;
>>  		if (IS_ERR(rt))
>>  			err = PTR_ERR(rt);
>> @@ -2737,7 +2740,6 @@ static int inet_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh,
>>  	if (err)
>>  		goto errout_free;
>>  
>> -	skb_dst_set(skb, &rt->dst);
> 
> 
> Why did you remove this? Neither ip_route_input() or ip_route_output_key()
> seem to justify this with a quick scan on my side. Feel free to correct me
> here.
> 

original patch was done in January. I forget why I took it out. It is
clearly needed to release the dst. Might as well undo the argument
change to rt_fill_info since it is attached to the skb. Something like
this (whitespace damaged on paste - stupid Mac):

diff --git a/net/ipv4/route.c b/net/ipv4/route.c
index f1f2e5aaa2d6..93cca12a8319 100644
--- a/net/ipv4/route.c
+++ b/net/ipv4/route.c
@@ -2547,8 +2547,9 @@ EXPORT_SYMBOL_GPL(ip_route_output_flow);
 /* called with rcu_read_lock held */
 static int rt_fill_info(struct net *net,  __be32 dst, __be32 src, u32
table_id,
                        struct flowi4 *fl4, struct sk_buff *skb, u32 portid,
-                       u32 seq, struct rtable *rt)
+                       u32 seq)
 {
+       struct rtable *rt = skb_rtable(skb);
        struct rtmsg *r;
        struct nlmsghdr *nlh;
        unsigned long expires = 0;
@@ -2750,6 +2751,8 @@ static int inet_rtm_getroute(struct sk_buff
*in_skb, struct nlmsghdr *nlh,
        if (err)
                goto errout_free;

+       skb_dst_set(skb, &rt->dst);
+
        if (rtm->rtm_flags & RTM_F_NOTIFY)
                rt->rt_flags |= RTCF_NOTIFY;

@@ -2763,8 +2766,7 @@ static int inet_rtm_getroute(struct sk_buff
*in_skb, struct nlmsghdr *nlh,
                                    fl4.flowi4_tos, res.fi, 0);
        else
                err = rt_fill_info(net, dst, src, table_id, &fl4, skb,
-                                  NETLINK_CB(in_skb).portid,
nlh->nlmsg_seq,
-                                  rt);
+                                  NETLINK_CB(in_skb).portid,
nlh->nlmsg_seq);
        if (err < 0)
                goto errout_free;


Seems to work for me.

  reply	other threads:[~2017-05-31 21:49 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-05-25 17:42 [PATCH net-next v2 0/8] net: extend RTM_GETROUTE to return fib result Roopa Prabhu
2017-05-25 17:42 ` [PATCH net-next v2 1/8] net: ipv4: refactor __ip_route_output_key_hash Roopa Prabhu
2017-05-25 17:42 ` [PATCH net-next v2 2/8] net: ipv4: refactor ip_route_input_noref Roopa Prabhu
2017-05-25 17:42 ` [PATCH net-next v2 3/8] net: ipv4: Remove event arg to rt_fill_info Roopa Prabhu
2017-05-25 17:42 ` [PATCH net-next v2 4/8] net: ipv4: Convert inet_rtm_getroute to rcu versions of route lookup Roopa Prabhu
2017-05-31 20:11   ` John Fastabend
2017-05-31 21:48     ` David Ahern [this message]
2017-06-01  4:34       ` Roopa Prabhu
2017-05-25 17:42 ` [PATCH net-next v2 5/8] net: ipv4: Save trie prefix to fib lookup result Roopa Prabhu
2017-05-25 17:42 ` [PATCH net-next v2 6/8] net: ipv4: add new RTM_F_FIB_MATCH flag for use with RTM_GETROUTE Roopa Prabhu
2017-05-25 17:42 ` [PATCH net-next v2 7/8] net: ipv4: RTM_GETROUTE: return matched fib result when requested Roopa Prabhu
2017-05-25 17:42 ` [PATCH net-next v2 8/8] net: ipv6: " Roopa Prabhu
2017-05-26 18:18 ` [PATCH net-next v2 0/8] net: extend RTM_GETROUTE to return fib result David Miller
2017-05-27  6:00   ` Roopa Prabhu
2017-05-27 14:02     ` David Ahern

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=d3fa47fd-e717-88c0-701d-a408d9ad5207@gmail.com \
    --to=dsahern@gmail.com \
    --cc=davem@davemloft.net \
    --cc=john.fastabend@gmail.com \
    --cc=netdev@vger.kernel.org \
    --cc=nikolay@cumulusnetworks.com \
    --cc=rami.rosen@intel.com \
    --cc=roopa@cumulusnetworks.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.