Tue, Sep 08, 2020 at 11:10:18AM CEST, ido...@idosch.org wrote: >From: Ido Schimmel <ido...@nvidia.com> > >Currently, the delete notification is emitted from the error path of >nexthop_add() and replace_nexthop(), which can be confusing to listeners >as they are not familiar with the nexthop. > >Instead, only emit the notification when the nexthop is actually >deleted. The following sub-cases are covered:
Well, in theory, this might break some very odd app that is adding a route and checking the errors using this notification. My opinion is to allow this breakage to happen, but I'm usually too benevolent :) > >1. User space deletes the nexthop >2. The nexthop is deleted by the kernel due to a netdev event (e.g., > nexthop device going down) >3. A group is deleted because its last nexthop is being deleted >4. The network namespace of the nexthop device is deleted > >Signed-off-by: Ido Schimmel <ido...@nvidia.com> >--- > net/ipv4/nexthop.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > >diff --git a/net/ipv4/nexthop.c b/net/ipv4/nexthop.c >index 13d9219a9aa1..8c0f17c6863c 100644 >--- a/net/ipv4/nexthop.c >+++ b/net/ipv4/nexthop.c >@@ -870,8 +870,6 @@ static void __remove_nexthop_fib(struct net *net, struct >nexthop *nh) > bool do_flush = false; > struct fib_info *fi; > >- call_nexthop_notifiers(net, NEXTHOP_EVENT_DEL, nh); >- > list_for_each_entry(fi, &nh->fi_list, nh_list) { > fi->fib_flags |= RTNH_F_DEAD; > do_flush = true; >@@ -909,6 +907,8 @@ static void __remove_nexthop(struct net *net, struct >nexthop *nh, > static void remove_nexthop(struct net *net, struct nexthop *nh, > struct nl_info *nlinfo) > { >+ call_nexthop_notifiers(net, NEXTHOP_EVENT_DEL, nh); >+ > /* remove from the tree */ > rb_erase(&nh->rb_node, &net->nexthop.rb_root); > >-- >2.26.2 >