Page MenuHomeFreeBSD

D16808.id46951.diff
No OneTemporary

D16808.id46951.diff

Index: sys/net/if_vlan.c
===================================================================
--- sys/net/if_vlan.c
+++ sys/net/if_vlan.c
@@ -1361,8 +1361,10 @@
ifv->ifv_pcp = 0; /* Default: best effort delivery. */
vlan_tag_recalculate(ifv);
error = vlan_inshash(trunk, ifv);
- if (error)
+ if (error) {
+ TRUNK_WUNLOCK(trunk);
goto done;
+ }
ifv->ifv_proto = ETHERTYPE_VLAN;
ifv->ifv_encaplen = ETHER_VLAN_ENCAP_LEN;
ifv->ifv_mintu = ETHERMIN;
@@ -1428,12 +1430,6 @@
((struct sockaddr_dl *)ifp->if_addr->ifa_addr)->sdl_alen =
p->if_addrlen;
- /*
- * Configure multicast addresses that may already be
- * joined on the vlan device.
- */
- (void)vlan_setmulti(ifp);
-
TASK_INIT(&ifv->lladdr_task, 0, vlan_lladdr_fn, ifv);
/* We are ready for operation now. */
@@ -1441,12 +1437,14 @@
/* Update flags on the parent, if necessary. */
vlan_setflags(ifp, 1);
-done:
+ TRUNK_WUNLOCK(trunk);
/*
- * We need to drop the non-sleepable rmlock so that the underlying
- * devices can sleep in their vlan_config hooks.
+ * Configure multicast addresses that may already be
+ * joined on the vlan device.
*/
- TRUNK_WUNLOCK(trunk);
+ (void)vlan_setmulti(ifp);
+
+done:
if (error == 0)
EVENTHANDLER_INVOKE(vlan_config, p, ifv->ifv_vid);
VLAN_XUNLOCK();

File Metadata

Mime Type
text/plain
Expires
Sat, May 16, 11:14 AM (4 h, 39 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
33127919
Default Alt Text
D16808.id46951.diff (1 KB)

Event Timeline