__skb_unlink(f_frag, f_frag->list); 
__skb_unlink(f_frag, queue); 
static struct sctp_ulpevent *sctp_make_reassembled_event(struct sk_buff *f_frag, struct sk_buff *l_frag){	struct sk_buff *pos;	struct sctp_ulpevent *event;	struct sk_buff *pnext, *last;	struct sk_buff *list = skb_shinfo(f_frag)->frag_list;	/* Store the pointer to the 2nd skb */	if (f_frag == l_frag)		pos = NULL;	else		pos = f_frag->next;	/* Get the last skb in the f_frag's frag_list if present. */	for (last = list; list; last = list, list = list->next);	/* Add the list of remaining fragments to the first fragments	 * frag_list.	 */	if (last)		last->next = pos;	else		skb_shinfo(f_frag)->frag_list = pos;	/* Remove the first fragment from the reassembly queue.  */	__skb_unlink(f_frag, f_frag->list);	while (pos) {		pnext = pos->next;		/* Update the len and data_len fields of the first fragment. */		f_frag->len += pos->len;		f_frag->data_len += pos->len;		/* Remove the fragment from the reassembly queue.  */		__skb_unlink(pos, pos->list);			/* Break if we have reached the last fragment.  */		if (pos == l_frag)			break;		pos->next = pnext;		pos = pnext;	};	event = sctp_skb2event(f_frag);	SCTP_INC_STATS(SCTP_MIB_REASMUSRMSGS);	return event;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/8728b834b226ffcf2c94a58530090e292af2a7bf/ulpqueue.c/clean/net/sctp/ulpqueue.c