[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: packets stuck in queue (was: Re: pfinet & ftp & hang, round two (muc

From: Marcus Brinkmann
Subject: Re: packets stuck in queue (was: Re: pfinet & ftp & hang, round two (much simpler case)
Date: Fri, 8 Jun 2001 22:47:07 +0200
User-agent: Mutt/1.3.18i

On Thu, Jun 07, 2001 at 05:29:58PM -0400, Roland McGrath wrote:
> > Are there timers responsible to flush the queue once in a while?  Maybe the
> > timer emulation code is broken?
> That seems like a decent bet.  There are indeed various timers used by the
> TCP transmit code (see tcp_timer.c).  You should look into the
> tcp_reset_xmit_timer calls and see if things looks reasonable.

Yow!  I fixed it.  The packets were hold because a delayed ack was not
transmitted.  This was because the delayed ack timer was set to expire at
tp->ato (2) + jiffies + jiffies.  It turns out that callers use add_timer
with delta + jiffies as argument, and add_timer in timer_emul.c adds
jiffies, too.  In linux/kernel/timer.c, it is clear that jiffies are not
added by add_timer, so the emulation code was wrong. Patched, compiled,
tried, works fine, case closed (picked up a lot about tcp on the way, more
than I ever wanted to know ;)

I have not tried it extensively.  It will be interesting to find out if
other problems with pfinet were a side effect.  But this was certainly the
worst problem currently.


2001-06-08  Marcus Brinkmann  <marcus@gnu.org>

        * timer-emul.c (add_timer): Don't add jiffies to EXPIRES, it is
        the responsibility of the caller to do this.

`Rhubarb is no Egyptian god.' Debian http://www.debian.org brinkmd@debian.org
Marcus Brinkmann              GNU    http://www.gnu.org    marcus@gnu.org

reply via email to

[Prev in Thread] Current Thread [Next in Thread]