skb_unlink(tmp); 
skb_unlink(tmp, &card->ackq); 
handle_ack(act2000_card *card, act2000_chan *chan, __u8 blocknr) {	unsigned long flags;	struct sk_buff *skb;	struct sk_buff *tmp;	struct actcapi_msg *m;	int ret = 0;	spin_lock_irqsave(&card->lock, flags);	skb = skb_peek(&card->ackq);	spin_unlock_irqrestore(&card->lock, flags);        if (!skb) {		printk(KERN_WARNING "act2000: handle_ack nothing found!\n");		return 0;	}        tmp = skb;        while (1) {                m = (actcapi_msg *)tmp->data;                if ((((m->msg.data_b3_req.fakencci >> 8) & 0xff) == chan->ncci) &&		    (m->msg.data_b3_req.blocknr == blocknr)) {			/* found corresponding DATA_B3_REQ */                        skb_unlink(tmp);			chan->queued -= m->msg.data_b3_req.datalen;			if (m->msg.data_b3_req.flags)				ret = m->msg.data_b3_req.datalen;			dev_kfree_skb(tmp);			if (chan->queued < 0)				chan->queued = 0;                        return ret;                }                spin_lock_irqsave(&card->lock, flags);                tmp = skb_peek((struct sk_buff_head *)tmp);                spin_unlock_irqrestore(&card->lock, flags);                if ((tmp == skb) || (tmp == NULL)) {			/* reached end of queue */			printk(KERN_WARNING "act2000: handle_ack nothing found!\n");                        return 0;		}        }}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/8728b834b226ffcf2c94a58530090e292af2a7bf/capi.c/buggy/drivers/isdn/act2000/capi.c