On Thu, Oct 10, 2013 at 9:48 PM, Alexei Starovoitov <a...@plumgrid.com> wrote: > On Thu, Oct 10, 2013 at 8:56 PM, Jesse Gross <je...@nicira.com> wrote: >> However, the check dev->reg_state in netdev_destroy() looks racy to >> me, as it could already be in NETREG_UNREGISTERED even if we already >> processed this device. > > you mean that netdev_destroy() will see reg_state == netreg_unregistered, > while dp_device_event() didn't see reg_state == netreg_unregistering yet? > or dp_device_event() saw it, proceeded to do unlink and > netdev_destroy() ran in parallel? > well, that's why reg_state == netreg_unregistering check in netdev_destroy() > is done with rtnl_lock() held. > reg_state cannot go into netreg_unregistered state skipping > netreg_unregistering and notifier. > therefore I don't think it's racy. > > In ovs_dp_notify_wq() you're checking for both unregistering and > unregistered and that makes > sense, since workq can run after unregistering notifier called and > netdev_run_todo() > already changed the state to unregistered. > But here it's not the case.
ovs_dp_notify_wq() calls ovs_dp_detach_port(), which indirectly calls netdev_destroy() so it seems like it actually is the same case to me. _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev