On 9/8/20 3:10 AM, Ido Schimmel wrote: > From: Ido Schimmel <ido...@nvidia.com> > > The notification is emitted after all the validation checks were > performed, but before the new configuration (i.e., 'struct nh_info') is > pointed at by the old shell (i.e., 'struct nexthop'). This prevents the > need to perform rollback in case the notification is vetoed. > > The next patch will also emit a replace notification for all the nexthop > groups in which the nexthop is used. > > Signed-off-by: Ido Schimmel <ido...@nvidia.com> > --- > net/ipv4/nexthop.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/net/ipv4/nexthop.c b/net/ipv4/nexthop.c > index a60a519a5462..b8a4abc00146 100644 > --- a/net/ipv4/nexthop.c > +++ b/net/ipv4/nexthop.c > @@ -1099,12 +1099,22 @@ static int replace_nexthop_single(struct net *net, > struct nexthop *old, > struct netlink_ext_ack *extack) > { > struct nh_info *oldi, *newi; > + int err; > > if (new->is_group) { > NL_SET_ERR_MSG(extack, "Can not replace a nexthop with a > nexthop group."); > return -EINVAL; > } > > + err = call_nexthop_notifiers(net, NEXTHOP_EVENT_REPLACE, new, extack); > + if (err) > + return err; > + > + /* Hardware flags were set on 'old' as 'new' is not in the red-black > + * tree. Therefore, inherit the flags from 'old' to 'new'. > + */ > + new->nh_flags |= old->nh_flags & (RTNH_F_OFFLOAD | RTNH_F_TRAP);
Will that always be true? ie., has h/w seen 'new' and offloaded it yet? vs the notifier telling hardware about the change, it does its thing and sets the flags. But I guess that creates a race between the offload and the new data being available. > + > oldi = rtnl_dereference(old->nh_info); > newi = rtnl_dereference(new->nh_info); > >