On 22/12/16(Thu) 20:45, Mike Belopuhov wrote: > 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.
splnet() in a pseudo-driver seems completely wrong, you could get rid of it. > > 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);