diff options
Diffstat (limited to 'net/sctp/stream_interleave.c')
| -rw-r--r-- | net/sctp/stream_interleave.c | 16 | 
1 files changed, 6 insertions, 10 deletions
| diff --git a/net/sctp/stream_interleave.c b/net/sctp/stream_interleave.c index 8c7cf8f08711..d3764c181299 100644 --- a/net/sctp/stream_interleave.c +++ b/net/sctp/stream_interleave.c @@ -3,7 +3,8 @@   *   * This file is part of the SCTP kernel implementation   * - * These functions manipulate sctp stream queue/scheduling. + * These functions implement sctp stream message interleaving, mostly + * including I-DATA and I-FORWARD-TSN chunks process.   *   * This SCTP implementation is free software;   * you can redistribute it and/or modify it under the terms of @@ -954,12 +955,8 @@ static void sctp_renege_events(struct sctp_ulpq *ulpq, struct sctp_chunk *chunk,  	__u32 freed = 0;  	__u16 needed; -	if (chunk) { -		needed = ntohs(chunk->chunk_hdr->length); -		needed -= sizeof(struct sctp_idata_chunk); -	} else { -		needed = SCTP_DEFAULT_MAXWINDOW; -	} +	needed = ntohs(chunk->chunk_hdr->length) - +		 sizeof(struct sctp_idata_chunk);  	if (skb_queue_empty(&asoc->base.sk->sk_receive_queue)) {  		freed = sctp_ulpq_renege_list(ulpq, &ulpq->lobby, needed); @@ -971,9 +968,8 @@ static void sctp_renege_events(struct sctp_ulpq *ulpq, struct sctp_chunk *chunk,  						       needed);  	} -	if (chunk && freed >= needed) -		if (sctp_ulpevent_idata(ulpq, chunk, gfp) <= 0) -			sctp_intl_start_pd(ulpq, gfp); +	if (freed >= needed && sctp_ulpevent_idata(ulpq, chunk, gfp) <= 0) +		sctp_intl_start_pd(ulpq, gfp);  	sk_mem_reclaim(asoc->base.sk);  } |