[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAPwn2JTF+j84+Bv4Zn=pqju2tnMuuJrhTr9Un786-PZ0D6af3w@mail.gmail.com>
Date: Thu, 20 Jul 2017 23:23:52 +0800
From: Hangbin Liu <liuhangbin@...il.com>
To: network dev <netdev@...r.kernel.org>
Cc: Roopa Prabhu <roopa@...ulusnetworks.com>,
WANG Cong <xiyou.wangcong@...il.com>,
Hangbin Liu <liuhangbin@...il.com>
Subject: Re: [PATCH net] ipv6: no need to return rt->dst.error if it is not
null entry.
2017-07-20 23:06 GMT+08:00 Hangbin Liu <liuhangbin@...il.com>:
>> +++ b/net/ipv6/route.c
>> @@ -3637,12 +3637,6 @@ static int inet6_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh,
>> dst = ip6_route_lookup(net, &fl6, 0);
>>
>> rt = container_of(dst, struct rt6_info, dst);
>> - if (rt->dst.error) {
>> - err = rt->dst.error;
>> - ip6_rt_put(rt);
>> - goto errout;
>> - }
>
> hmm... or instead of remove this check, should we check all the entry? Like
> if ((rt->dst.error && rt != net->ipv6.ip6_null_entry && rt !=
^^ mistake here
> net->ipv6.ip6_blk_hole_entry) ||
> rt == net->ipv6.ip6_null_entry )
Sorry, there should be no need to check ip6_null_entry since the
error is already
-ENETUNREACH. So how about
diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index 4d30c96..c290aa4 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -3637,13 +3637,8 @@ static int inet6_rtm_getroute(struct sk_buff
*in_skb, struct nlmsghdr *nlh,
dst = ip6_route_lookup(net, &fl6, 0);
rt = container_of(dst, struct rt6_info, dst);
- if (rt->dst.error) {
- err = rt->dst.error;
- ip6_rt_put(rt);
- goto errout;
- }
-
- if (rt == net->ipv6.ip6_null_entry) {
+ if (rt->dst.error && rt != net->ipv6.ip6_prohibit_entry &&
+ rt != net->ipv6.ip6_blk_hole_entry) {
err = rt->dst.error;
ip6_rt_put(rt);
goto errout;
Thanks
Hangbin
Powered by blists - more mailing lists