Output queue of tun(4) gets full after some time when sending lots of data. I have been observing this on -CURRENT at least since March this year.
Looks like it's a race condition (same in tun(4) and tap(4)), the following patch seems to address the issue: Index: if_tap.c =================================================================== --- if_tap.c (revision 212217) +++ if_tap.c (working copy) @@ -881,8 +881,7 @@ mtx_lock(&tp->tap_mtx); tp->tap_flags |= TAP_RWAIT; - mtx_unlock(&tp->tap_mtx); - error = tsleep(tp,PCATCH|(PZERO+1),"taprd",0); + error = mtx_sleep(tp, &tp->tap_mtx, PDROP|PCATCH|(PZERO+1), "taprd", 0); if (error) return (error); } Index: if_tun.c =================================================================== --- if_tun.c (revision 212217) +++ if_tun.c (working copy) @@ -836,8 +836,7 @@ } mtx_lock(&tp->tun_mtx); tp->tun_flags |= TUN_RWAIT; - mtx_unlock(&tp->tun_mtx); - if ((error = tsleep(tp, PCATCH | (PZERO + 1), + if ((error = mtx_sleep(tp, &tp->tun_mtx, PDROP | PCATCH | (PZERO + 1), "tunread", 0)) != 0) { splx(s); return (error); --Marcin _______________________________________________ freebsd-current@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-current To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"