[SCTP]: Include sk_buff overhead while updating the peer's receive window.
Currently if the sender is sending small messages, it can cause a receiver to run out of receive buffer space even when the advertised receive window is still open and results in packet drops and retransmissions. Including a overhead while updating the sender's view of peer receive window will reduce the chances of receive buffer space overshooting the receive window. Signed-off-by: Sridhar Samudrala <sri@us.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
208edef6a5
Коммит
cd49788563
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче