net: fib_notifier: make FIB notifier per-netns
Currently all users of FIB notifier only cares about events in init_net. Later in this patchset, users get interested in other namespaces too. However, for every registered block user is interested only about one namespace. Make the FIB notifier registration per-netns and avoid unnecessary calls of notifier block for other namespaces. Signed-off-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
a5facc4cac
commit
7c550daffe
@@ -2189,9 +2189,6 @@ static int rocker_router_fib_event(struct notifier_block *nb,
|
||||
struct rocker_fib_event_work *fib_work;
|
||||
struct fib_notifier_info *info = ptr;
|
||||
|
||||
if (!net_eq(info->net, &init_net))
|
||||
return NOTIFY_DONE;
|
||||
|
||||
if (info->family != AF_INET)
|
||||
return NOTIFY_DONE;
|
||||
|
||||
@@ -2994,7 +2991,7 @@ static int rocker_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
* the device, so no need to pass a callback.
|
||||
*/
|
||||
rocker->fib_nb.notifier_call = rocker_router_fib_event;
|
||||
err = register_fib_notifier(&rocker->fib_nb, NULL);
|
||||
err = register_fib_notifier(&init_net, &rocker->fib_nb, NULL);
|
||||
if (err)
|
||||
goto err_register_fib_notifier;
|
||||
|
||||
@@ -3021,7 +3018,7 @@ static int rocker_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
err_register_switchdev_blocking_notifier:
|
||||
unregister_switchdev_notifier(&rocker_switchdev_notifier);
|
||||
err_register_switchdev_notifier:
|
||||
unregister_fib_notifier(&rocker->fib_nb);
|
||||
unregister_fib_notifier(&init_net, &rocker->fib_nb);
|
||||
err_register_fib_notifier:
|
||||
rocker_remove_ports(rocker);
|
||||
err_probe_ports:
|
||||
@@ -3057,7 +3054,7 @@ static void rocker_remove(struct pci_dev *pdev)
|
||||
unregister_switchdev_blocking_notifier(nb);
|
||||
|
||||
unregister_switchdev_notifier(&rocker_switchdev_notifier);
|
||||
unregister_fib_notifier(&rocker->fib_nb);
|
||||
unregister_fib_notifier(&init_net, &rocker->fib_nb);
|
||||
rocker_remove_ports(rocker);
|
||||
rocker_write32(rocker, CONTROL, ROCKER_CONTROL_RESET);
|
||||
destroy_workqueue(rocker->rocker_owq);
|
||||
|
Reference in New Issue
Block a user