> static int call_netdevice_notifiers_info(unsigned long val, > struct netdev_notifier_info *info) > { > + struct net *net = dev_net(info->dev); > + int ret; > + > ASSERT_RTNL(); > + > + /* Run per-netns notifier block chain first, then run the global one. > + * Hopefully, one day, the global one is going to be removed after > + * all notifier block registrators get converted to be per-netns. > + */
Hi Jiri Is that really going to happen? register_netdevice_notifier() is used in 130 files. Do you plan to spend the time to make it happen? > + ret = raw_notifier_call_chain(&net->netdev_chain, val, info); > + if (ret & NOTIFY_STOP_MASK) > + return ret; > return raw_notifier_call_chain(&netdev_chain, val, info); > } Humm. I wonder about NOTIFY_STOP_MASK here. These are two separate chains. Should one chain be able to stop the other chain? Are there other examples where NOTIFY_STOP_MASK crosses a chain boundary? Andrew