diff options
Diffstat (limited to 'net/sctp/output.c')
-rw-r--r-- | net/sctp/output.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/net/sctp/output.c b/net/sctp/output.c index cdc5a3936766..3ef4351dd956 100644 --- a/net/sctp/output.c +++ b/net/sctp/output.c | |||
@@ -633,7 +633,7 @@ static sctp_xmit_t sctp_packet_append_data(struct sctp_packet *packet, | |||
633 | * data will fit or delay in hopes of bundling a full | 633 | * data will fit or delay in hopes of bundling a full |
634 | * sized packet. | 634 | * sized packet. |
635 | */ | 635 | */ |
636 | if (len < asoc->pathmtu - packet->overhead) { | 636 | if (len < asoc->frag_point) { |
637 | retval = SCTP_XMIT_NAGLE_DELAY; | 637 | retval = SCTP_XMIT_NAGLE_DELAY; |
638 | goto finish; | 638 | goto finish; |
639 | } | 639 | } |
@@ -645,7 +645,13 @@ static sctp_xmit_t sctp_packet_append_data(struct sctp_packet *packet, | |||
645 | /* Keep track of how many bytes are in flight to the receiver. */ | 645 | /* Keep track of how many bytes are in flight to the receiver. */ |
646 | asoc->outqueue.outstanding_bytes += datasize; | 646 | asoc->outqueue.outstanding_bytes += datasize; |
647 | 647 | ||
648 | /* Update our view of the receiver's rwnd. */ | 648 | /* Update our view of the receiver's rwnd. Include sk_buff overhead |
649 | * while updating peer.rwnd so that it reduces the chances of a | ||
650 | * receiver running out of receive buffer space even when receive | ||
651 | * window is still open. This can happen when a sender is sending | ||
652 | * sending small messages. | ||
653 | */ | ||
654 | datasize += sizeof(struct sk_buff); | ||
649 | if (datasize < rwnd) | 655 | if (datasize < rwnd) |
650 | rwnd -= datasize; | 656 | rwnd -= datasize; |
651 | else | 657 | else |