diff options
Diffstat (limited to 'net/sctp/ulpqueue.c')
| -rw-r--r-- | net/sctp/ulpqueue.c | 24 | 
1 files changed, 8 insertions, 16 deletions
| diff --git a/net/sctp/ulpqueue.c b/net/sctp/ulpqueue.c index a71be33f3afe..e36ec5dd64c6 100644 --- a/net/sctp/ulpqueue.c +++ b/net/sctp/ulpqueue.c @@ -1084,29 +1084,21 @@ void sctp_ulpq_partial_delivery(struct sctp_ulpq *ulpq,  void sctp_ulpq_renege(struct sctp_ulpq *ulpq, struct sctp_chunk *chunk,  		      gfp_t gfp)  { -	struct sctp_association *asoc; -	__u16 needed, freed; - -	asoc = ulpq->asoc; +	struct sctp_association *asoc = ulpq->asoc; +	__u32 freed = 0; +	__u16 needed; -	if (chunk) { -		needed = ntohs(chunk->chunk_hdr->length); -		needed -= sizeof(struct sctp_data_chunk); -	} else -		needed = SCTP_DEFAULT_MAXWINDOW; - -	freed = 0; +	needed = ntohs(chunk->chunk_hdr->length) - +		 sizeof(struct sctp_data_chunk);  	if (skb_queue_empty(&asoc->base.sk->sk_receive_queue)) {  		freed = sctp_ulpq_renege_order(ulpq, needed); -		if (freed < needed) { +		if (freed < needed)  			freed += sctp_ulpq_renege_frags(ulpq, needed - freed); -		}  	}  	/* If able to free enough room, accept this chunk. */ -	if (chunk && (freed >= needed)) { -		int retval; -		retval = sctp_ulpq_tail_data(ulpq, chunk, gfp); +	if (freed >= needed) { +		int retval = sctp_ulpq_tail_data(ulpq, chunk, gfp);  		/*  		 * Enter partial delivery if chunk has not been  		 * delivered; otherwise, drain the reassembly queue. |