From: Xin Long <lucien....@gmail.com>
Date: Thu,  3 Aug 2017 14:13:46 +0800

> After commit c2ed1880fd61 ("net: ipv6: check route protocol when
> deleting routes"), ipv6 route checks rt protocol when trying to
> remove a rt entry.
> 
> It introduced a side effect causing 'ip -6 route flush cache' not
> to work well. When flushing caches with iproute, all route caches
> get dumped from kernel then removed one by one by sending DELROUTE
> requests to kernel for each cache.
> 
> The thing is iproute sends the request with the cache whose proto
> is set with RTPROT_REDIRECT by rt6_fill_node() when kernel dumps
> it. But in kernel the rt_cache protocol is still 0, which causes
> the cache not to be matched and removed.
> 
> So the real reason is rt6i_protocol in the route is not set when
> it is allocated. As David Ahern's suggestion, this patch is to
> set rt6i_protocol properly in the route when it is installed and
> remove the codes setting rtm_protocol according to rt6i_flags in
> rt6_fill_node.
> 
> This is also an improvement to keep rt6i_protocol consistent with
> rtm_protocol.
> 
> Fixes: c2ed1880fd61 ("net: ipv6: check route protocol when deleting routes")
> Reported-by: Jianlin Shi <ji...@redhat.com>
> Suggested-by: David Ahern <dsah...@gmail.com>
> Signed-off-by: Xin Long <lucien....@gmail.com>

Applied and queued up for -stable, thanks.

Reply via email to