Page MenuHomeFreeBSD

D28530.id83569.diff
No OneTemporary

D28530.id83569.diff

Index: sys/net/if.h
===================================================================
--- sys/net/if.h
+++ sys/net/if.h
@@ -604,6 +604,9 @@
MALLOC_DECLARE(M_IFADDR);
MALLOC_DECLARE(M_IFMADDR);
#endif
+
+extern struct sx ifnet_detach_sxlock;
+
#endif
#ifndef _KERNEL
Index: sys/net/if.c
===================================================================
--- sys/net/if.c
+++ sys/net/if.c
@@ -315,7 +315,8 @@
SX_SYSINIT_FLAGS(ifnet_sx, &ifnet_sxlock, "ifnet_sx", SX_RECURSE);
struct sx ifnet_detach_sxlock;
-SX_SYSINIT(ifnet_detach, &ifnet_detach_sxlock, "ifnet_detach_sx");
+SX_SYSINIT_FLAGS(ifnet_detach, &ifnet_detach_sxlock, "ifnet_detach_sx",
+ SX_RECURSE);
/*
* The allocation of network interfaces is a rather non-atomic affair; we
@@ -546,9 +547,7 @@
IFNET_WUNLOCK();
for (int j = 0; j < i; j++) {
- sx_xlock(&ifnet_detach_sxlock);
if_vmove(pending[j], pending[j]->if_home_vnet);
- sx_xunlock(&ifnet_detach_sxlock);
}
free(pending, M_IFNET);
@@ -1124,9 +1123,9 @@
CURVNET_SET_QUIET(ifp->if_vnet);
found = if_unlink_ifnet(ifp, false);
if (found) {
- sx_slock(&ifnet_detach_sxlock);
+ sx_xlock(&ifnet_detach_sxlock);
if_detach_internal(ifp, 0, NULL);
- sx_sunlock(&ifnet_detach_sxlock);
+ sx_xunlock(&ifnet_detach_sxlock);
}
CURVNET_RESTORE();
}
@@ -3015,9 +3014,9 @@
error = priv_check(td, PRIV_NET_IFDESTROY);
if (error == 0) {
- sx_slock(&ifnet_detach_sxlock);
+ sx_xlock(&ifnet_detach_sxlock);
error = if_clone_destroy(ifr->ifr_name);
- sx_sunlock(&ifnet_detach_sxlock);
+ sx_xunlock(&ifnet_detach_sxlock);
}
goto out_noref;
Index: sys/net/vnet.c
===================================================================
--- sys/net/vnet.c
+++ sys/net/vnet.c
@@ -283,7 +283,9 @@
vnet->vnet_shutdown = true;
CURVNET_SET_QUIET(vnet);
+ sx_xlock(&ifnet_detach_sxlock);
vnet_sysuninit();
+ sx_xunlock(&ifnet_detach_sxlock);
CURVNET_RESTORE();
/*

File Metadata

Mime Type
text/plain
Expires
Sun, Jan 12, 2:27 AM (12 h, 44 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
15760079
Default Alt Text
D28530.id83569.diff (1 KB)

Event Timeline