On 6/3/19 12:09 PM, Wei Wang wrote:
>> @@ -667,6 +704,13 @@ static void __remove_nexthop_fib(struct net *net, 
>> struct nexthop *nh)
>>         }
>>         if (do_flush)
>>                 fib_flush(net);
>> +
>> +       /* ip6_del_rt removes the entry from this list hence the _safe */
>> +       list_for_each_entry_safe(f6i, tmp, &nh->f6i_list, nh_list) {
>> +               /* __ip6_del_rt does a release, so do a hold here */
>> +               fib6_info_hold(f6i);
> Do we need fib6_info_hold_safe() here?
> 

I do not think so.

If it is on the f6i_list, then fib6_purge_rt has not been called.
fib6_purge_rt and this function are both called with rtnl held, so there
is no race with the removal from the list.

Reply via email to