From 36728c97fd906a229aa0afcc43e4aa3570b36123 Mon Sep 17 00:00:00 2001 From: Sridhar Samudrala Date: Fri, 29 Sep 2006 17:09:05 -0700 Subject: [PATCH] --- yaml --- r: 37213 b: refs/heads/master c: cd49788563d3b9e2ec0b316fa57aef1c0cb3bd4b h: refs/heads/master i: 37211: 765545d759557e482a3d5c77660b95b1574f4016 v: v3 --- [refs] | 2 +- trunk/net/sctp/output.c | 10 ++++++++-- trunk/net/sctp/outqueue.c | 3 ++- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 6aacd942f065..aa37fe441680 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 208edef6a5b6c50363c77efcf34c4b4020681029 +refs/heads/master: cd49788563d3b9e2ec0b316fa57aef1c0cb3bd4b diff --git a/trunk/net/sctp/output.c b/trunk/net/sctp/output.c index cdc5a3936766..3ef4351dd956 100644 --- a/trunk/net/sctp/output.c +++ b/trunk/net/sctp/output.c @@ -633,7 +633,7 @@ static sctp_xmit_t sctp_packet_append_data(struct sctp_packet *packet, * data will fit or delay in hopes of bundling a full * sized packet. */ - if (len < asoc->pathmtu - packet->overhead) { + if (len < asoc->frag_point) { retval = SCTP_XMIT_NAGLE_DELAY; goto finish; } @@ -645,7 +645,13 @@ static sctp_xmit_t sctp_packet_append_data(struct sctp_packet *packet, /* Keep track of how many bytes are in flight to the receiver. */ asoc->outqueue.outstanding_bytes += datasize; - /* Update our view of the receiver's rwnd. */ + /* Update our view of the receiver's rwnd. Include sk_buff overhead + * while updating peer.rwnd so that it reduces the chances of a + * receiver running out of receive buffer space even when receive + * window is still open. This can happen when a sender is sending + * sending small messages. + */ + datasize += sizeof(struct sk_buff); if (datasize < rwnd) rwnd -= datasize; else diff --git a/trunk/net/sctp/outqueue.c b/trunk/net/sctp/outqueue.c index 37074a39ecbb..739582415bf6 100644 --- a/trunk/net/sctp/outqueue.c +++ b/trunk/net/sctp/outqueue.c @@ -416,7 +416,8 @@ void sctp_retransmit_mark(struct sctp_outq *q, * (Section 7.2.4)), add the data size of those * chunks to the rwnd. */ - q->asoc->peer.rwnd += sctp_data_size(chunk); + q->asoc->peer.rwnd += (sctp_data_size(chunk) + + sizeof(struct sk_buff)); q->outstanding_bytes -= sctp_data_size(chunk); transport->flight_size -= sctp_data_size(chunk);