mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-24 20:54:10 +08:00
ipv4: add __unregister_nexthop_notifier()
unregister_nexthop_notifier() assumes the caller does not hold rtnl. We need in the following patch to use it from a context already holding rtnl. Add __unregister_nexthop_notifier(). unregister_nexthop_notifier() becomes a wrapper. Signed-off-by: Eric Dumazet <edumazet@google.com> Reviewed-by: David Ahern <dsahern@kernel.org> Reviewed-by: Antoine Tenart <atenart@kernel.org> Link: https://lore.kernel.org/r/20240206144313.2050392-9-edumazet@google.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
6eedda01b2
commit
70f16ea2e4
@ -218,6 +218,7 @@ struct nh_notifier_info {
|
||||
|
||||
int register_nexthop_notifier(struct net *net, struct notifier_block *nb,
|
||||
struct netlink_ext_ack *extack);
|
||||
int __unregister_nexthop_notifier(struct net *net, struct notifier_block *nb);
|
||||
int unregister_nexthop_notifier(struct net *net, struct notifier_block *nb);
|
||||
void nexthop_set_hw_flags(struct net *net, u32 id, bool offload, bool trap);
|
||||
void nexthop_bucket_set_hw_flags(struct net *net, u32 id, u16 bucket_index,
|
||||
|
@ -3631,17 +3631,24 @@ unlock:
|
||||
}
|
||||
EXPORT_SYMBOL(register_nexthop_notifier);
|
||||
|
||||
int __unregister_nexthop_notifier(struct net *net, struct notifier_block *nb)
|
||||
{
|
||||
int err;
|
||||
|
||||
err = blocking_notifier_chain_unregister(&net->nexthop.notifier_chain,
|
||||
nb);
|
||||
if (!err)
|
||||
nexthops_dump(net, nb, NEXTHOP_EVENT_DEL, NULL);
|
||||
return err;
|
||||
}
|
||||
EXPORT_SYMBOL(__unregister_nexthop_notifier);
|
||||
|
||||
int unregister_nexthop_notifier(struct net *net, struct notifier_block *nb)
|
||||
{
|
||||
int err;
|
||||
|
||||
rtnl_lock();
|
||||
err = blocking_notifier_chain_unregister(&net->nexthop.notifier_chain,
|
||||
nb);
|
||||
if (err)
|
||||
goto unlock;
|
||||
nexthops_dump(net, nb, NEXTHOP_EVENT_DEL, NULL);
|
||||
unlock:
|
||||
err = __unregister_nexthop_notifier(net, nb);
|
||||
rtnl_unlock();
|
||||
return err;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user