skb_unlink(skb); 
skb_unlink(skb, &bfusb->pending_q); 
static void bfusb_rx_complete(struct urb *urb, struct pt_regs *regs){	struct sk_buff *skb = (struct sk_buff *) urb->context;	struct bfusb *bfusb = (struct bfusb *) skb->dev;	unsigned char *buf = urb->transfer_buffer;	int count = urb->actual_length;	int err, hdr, len;	BT_DBG("bfusb %p urb %p skb %p len %d", bfusb, urb, skb, skb->len);	read_lock(&bfusb->lock);	if (!test_bit(HCI_RUNNING, &bfusb->hdev->flags))		goto unlock;	if (urb->status || !count)		goto resubmit;	bfusb->hdev->stat.byte_rx += count;	skb_put(skb, count);	while (count) {		hdr = buf[0] | (buf[1] << 8);		if (hdr & 0x4000) {			len = 0;			count -= 2;			buf   += 2;		} else {			len = (buf[2] == 0) ? 256 : buf[2];			count -= 3;			buf   += 3;		}		if (count < len) {			BT_ERR("%s block extends over URB buffer ranges",					bfusb->hdev->name);		}		if ((hdr & 0xe1) == 0xc1)			bfusb_recv_block(bfusb, hdr, buf, len);		count -= len;		buf   += len;	}	skb_unlink(skb);	kfree_skb(skb);	bfusb_rx_submit(bfusb, urb);	read_unlock(&bfusb->lock);	return;resubmit:	urb->dev = bfusb->udev;	err = usb_submit_urb(urb, GFP_ATOMIC);	if (err) {		BT_ERR("%s bulk resubmit failed urb %p err %d",					bfusb->hdev->name, urb, err);	}unlock:	read_unlock(&bfusb->lock);}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/8728b834b226ffcf2c94a58530090e292af2a7bf/bfusb.c/buggy/drivers/bluetooth/bfusb.c