On Wed, Dec 21, 2016 at 13:06 +0100, Alexander Bluhm wrote: > On Wed, Dec 21, 2016 at 12:45:37PM +0100, Mike Belopuhov wrote: > > Anyways, OK for the diff below? > > OK bluhm@ > > > diff --git sys/net/if_pflow.c sys/net/if_pflow.c > > index 0df0b69fd8a..8592d98a743 100644 > > --- sys/net/if_pflow.c > > +++ sys/net/if_pflow.c > > @@ -265,14 +265,11 @@ pflow_clone_destroy(struct ifnet *ifp) > > if (timeout_initialized(&sc->sc_tmo_tmpl)) > > timeout_del(&sc->sc_tmo_tmpl); > > pflow_flush(sc); > > m_freem(sc->send_nam); > > if (sc->so != NULL) { > > - /* XXXSMP breaks atomicity */ > > - rw_exit_write(&netlock); > > error = soclose(sc->so); > > - rw_enter_write(&netlock); > > sc->so = NULL; > > } > > if (sc->sc_flowdst != NULL) > > free(sc->sc_flowdst, M_DEVBUF, sc->sc_flowdst->sa_len); > > if (sc->sc_flowsrc != NULL)
I think this is what is required here. Works here, but YMMV. diff --git sys/net/if_vxlan.c sys/net/if_vxlan.c index e9bc1cb8305..dfb71cf9467 100644 --- sys/net/if_vxlan.c +++ sys/net/if_vxlan.c @@ -178,13 +178,15 @@ int vxlan_clone_destroy(struct ifnet *ifp) { struct vxlan_softc *sc = ifp->if_softc; int s; + NET_LOCK(s); s = splnet(); vxlan_multicast_cleanup(ifp); splx(s); + NET_UNLOCK(s); vxlan_enable--; LIST_REMOVE(sc, sc_entry); ifmedia_delete_instance(&sc->sc_media, IFM_INST_ANY);