|
@@ -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
|
|
* data will fit or delay in hopes of bundling a full
|
|
* sized packet.
|
|
* sized packet.
|
|
*/
|
|
*/
|
|
- if (len < asoc->pathmtu - packet->overhead) {
|
|
|
|
|
|
+ if (len < asoc->frag_point) {
|
|
retval = SCTP_XMIT_NAGLE_DELAY;
|
|
retval = SCTP_XMIT_NAGLE_DELAY;
|
|
goto finish;
|
|
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. */
|
|
/* Keep track of how many bytes are in flight to the receiver. */
|
|
asoc->outqueue.outstanding_bytes += datasize;
|
|
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)
|
|
if (datasize < rwnd)
|
|
rwnd -= datasize;
|
|
rwnd -= datasize;
|
|
else
|
|
else
|