On Thu, May 21, 2015 at 2:02 PM, David Miller <[email protected]> wrote: > > From: Baptiste Covolato <[email protected]> > Date: Tue, 19 May 2015 16:24:51 -0700 > > > Update flush_backlog to flush all packets in the backlog queue belonging > > to a device being unregistered. Accordingly on_each_cpu no longer needs > > to pass a device to flush_backlog since it handles any device in the > > NETREG_UNREGISTERED state. > > > > Signed-off-by: Baptiste Covolato <[email protected]> > > Signed-off-by: Francesco Ruggeri <[email protected]> > > This is quite bogus if you ask me. > > This is the one spot causing a device to make the transition > to unregistered state, so passing that specific device to > flush_backlog() is the completely logical way to handle this. > > If this is some hack that is made necessary by your parallel > notification scheme, I do not find it acceptable.
Using NETREG_UNREGISTERED is not needed in order for the parallel scheme to work. One can change flush_backlog to also handle a list of net_devices instead. In both cases on_each_cpu is invoked only once instead of once per net_device. In case of the latter though more time is spent in flush_backlog, since each packet has to be compared against all interfaces being deleted. We tried both approaches and they both worked for us. Using NETREG_UNREGISTERED can result in a task flushing packets from interfaces that another task may be in the process of deleting, but that should not be a problem since those packets are expected to be flushed anyway and access to the backlog lists is protected. Francesco > > I'm not applying this series, sorry. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
