From b61ca9187605d0fafa6ddac2c288c9db4912d4ce Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Sat, 13 Jul 2002 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 2002-07-13 --- ip/ip.h | 3 ++- ip/netlog.c | 3 ++- ip/tcp.c | 23 +++++++++++------------ port/qio.c | 4 +++- 4 files changed, 18 insertions(+), 15 deletions(-) diff --git a/ip/ip.h b/ip/ip.h index cfdc9c5e52537ff2ff7dab22df4ba35939fe5cbb..4c4c34f6ec7bf5cda57b059371322f785b1900b1 100644 --- a/ip/ip.h +++ b/ip/ip.h @@ -390,13 +390,14 @@ enum Logilmsg= 1<<8, Loggre= 1<<9, Logppp= 1<<10, - Logtcpmsg= 1<<11, + Logtcprxmt= 1<<11, Logigmp= 1<<12, Logudpmsg= 1<<13, Logipmsg= 1<<14, Logrudp= 1<<15, Logrudpmsg= 1<<16, Logesp= 1<<17, + Logtcpwin= 1<<18, }; void netloginit(Fs*); diff --git a/ip/netlog.c b/ip/netlog.c index 3ae36f3425e266325a8c23f18b545e1ae071f754..3ee200fe3162cb195fd6be12ef9c4a010eebd231 100644 --- a/ip/netlog.c +++ b/ip/netlog.c @@ -46,7 +46,8 @@ static Netlogflag flags[] = { "compress", Logcompress, }, { "ilmsg", Logil|Logilmsg, }, { "gre", Loggre, }, - { "tcpmsg", Logtcp|Logtcpmsg, }, + { "tcpwin", Logtcp|Logtcpwin, }, + { "tcprxmt", Logtcp|Logtcprxmt, }, { "udpmsg", Logudp|Logudpmsg, }, { "ipmsg", Logip|Logipmsg, }, { "esp", Logesp, }, diff --git a/ip/tcp.c b/ip/tcp.c index a1430d502560284a129a17e57d0ef6e08372ec9f..e14fbc1b1ff6f93e3d627bec784b3e1974ab227e 100644 --- a/ip/tcp.c +++ b/ip/tcp.c @@ -576,7 +576,7 @@ static void tcpcreate(Conv *c) { c->rq = qopen(QMAX, Qcoalesce, tcpacktimer, c); - c->wq = qopen(2*QMAX, Qkick, tcpkick, c); + c->wq = qopen(4*QMAX, Qkick, tcpkick, c); } static void @@ -1662,7 +1662,7 @@ update(Conv *s, Tcp *seg) && seg->wnd == tcb->snd.wnd) { /* this is a pure ack w/o window update */ - netlog(s->p->f, Logtcpmsg, "dupack %lud ack %lud sndwnd %d advwin %d\n", + netlog(s->p->f, Logtcprxmt, "dupack %lud ack %lud sndwnd %d advwin %d\n", tcb->snd.dupacks, seg->ack, tcb->snd.wnd, seg->wnd); if(++tcb->snd.dupacks == TCPREXMTTHRESH) { @@ -1672,7 +1672,7 @@ update(Conv *s, Tcp *seg) */ tcb->snd.recovery = 1; tcb->snd.rxt = tcb->snd.nxt; - netlog(s->p->f, Logtcpmsg, "fast rxt %lud, nxt %lud\n", tcb->snd.una, tcb->snd.nxt); + netlog(s->p->f, Logtcprxmt, "fast rxt %lud, nxt %lud\n", tcb->snd.una, tcb->snd.nxt); tcprxmit(s); } else { /* do reno tcp here. */ @@ -2303,7 +2303,7 @@ tcpoutput(Conv *s) if(sent != 0) { if((tcb->flags&FORCE) == 0) break; - tcb->snd.ptr = tcb->snd.una; +// tcb->snd.ptr = tcb->snd.una; } usable = 1; } @@ -2443,11 +2443,7 @@ tcpoutput(Conv *s) tpriv->stats[OutSegs]++; if(tcb->kacounter > 0) tcpgo(tpriv, &tcb->katimer); - qunlock(s); - if(waserror()){ - qlock(s); - nexterror(); - } + switch(version){ case V4: ipoput4(f, hbp, 0, s->ttl, s->tos); @@ -2458,8 +2454,11 @@ tcpoutput(Conv *s) default: panic("tcpoutput2: version %d", version); } - qlock(s); - poperror(); + if((msgs%4) == 1){ + qunlock(s); + sched(); + qlock(s); + } } } @@ -2641,8 +2640,8 @@ tcptimeout(void *arg) localclose(s, Etimedout); break; } + netlog(s->p->f, Logtcprxmt, "timeout rexmit 0x%lux %d/%d\n", tcb->snd.una, tcb->timer.start, NOW); tcpsettimer(tcb); - netlog(s->p->f, Logtcp, "timeout rexmit 0x%lux\n", tcb->snd.una); tcprxmit(s); tpriv->stats[RetransTimeouts]++; tcb->snd.dupacks = 0; diff --git a/port/qio.c b/port/qio.c index 382909423949c2f0f7fcd2c3d8c66cea1691f0c8..f9e720a79085ffcda32a9da8d8a5390746e14e4a 100644 --- a/port/qio.c +++ b/port/qio.c @@ -1124,6 +1124,8 @@ qnotfull(void *a) return q->len < q->limit || (q->state & Qclosed); } +ulong noblockcnt; + /* * add a block to a queue obeying flow control */ @@ -1156,6 +1158,7 @@ qbwrite(Queue *q, Block *b) if(q->noblock){ iunlock(q); freeb(b); + noblockcnt += n; qunlock(&q->wlock); poperror(); return n; @@ -1448,7 +1451,6 @@ qsetlimit(Queue *q, int limit) void qnoblock(Queue *q, int onoff) { -print("nonblocking %d\n", onoff); q->noblock = onoff; }