tcp_collapse(sk, head, skb, start, end);
tcp_collapse(sk, &tp->out_of_order_queue, head, skb, start, end);
static void tcp_collapse_ofo_queue(struct sock *sk){	struct tcp_sock *tp = tcp_sk(sk);	struct sk_buff *skb = skb_peek(&tp->out_of_order_queue);	struct sk_buff *head;	u32 start, end;	if (skb == NULL)		return;	start = TCP_SKB_CB(skb)->seq;	end = TCP_SKB_CB(skb)->end_seq;	head = skb;	for (;;) {		skb = skb->next;		/* Segment is terminated when we see gap or when		 * we are at the end of all the queue. */		if (skb == (struct sk_buff *)&tp->out_of_order_queue ||		    after(TCP_SKB_CB(skb)->seq, end) ||		    before(TCP_SKB_CB(skb)->end_seq, start)) {			tcp_collapse(sk, head, skb, start, end);			head = skb;			if (skb == (struct sk_buff *)&tp->out_of_order_queue)				break;			/* Start new segment */			start = TCP_SKB_CB(skb)->seq;			end = TCP_SKB_CB(skb)->end_seq;		} else {			if (before(TCP_SKB_CB(skb)->seq, start))				start = TCP_SKB_CB(skb)->seq;			if (after(TCP_SKB_CB(skb)->end_seq, end))				end = TCP_SKB_CB(skb)->end_seq;		}	}}