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.