--- sys/net/if_vlan.c.orig 2006-10-17 11:24:18.000000000 +0400 +++ sys/net/if_vlan.c 2007-11-07 01:25:22.000000000 +0300 @@ -439,7 +439,9 @@ vlan_clone_create(struct if_clone *ifc, ifp->if_init = vlan_ifinit; ifp->if_start = vlan_start; ifp->if_ioctl = vlan_ioctl; - ifp->if_snd.ifq_maxlen = ifqmaxlen; + IFQ_SET_MAXLEN(&ifp->if_snd, ifqmaxlen); + ifp->if_snd.ifq_drv_maxlen = 0; + IFQ_SET_READY(&ifp->if_snd); ifp->if_flags = VLAN_IFFLAGS; ether_ifattach(ifp, eaddr); /* Now undo some of the damage... */ @@ -532,8 +534,9 @@ vlan_start(struct ifnet *ifp) ifv = ifp->if_softc; p = ifv->ifv_p; - for (;;) { - IF_DEQUEUE(&ifp->if_snd, m); + while (!IFQ_IS_EMPTY(&ifp->if_snd)) { + + IFQ_DEQUEUE(&ifp->if_snd, m); if (m == 0) break; BPF_MTAP(ifp, m);