bt_cb(skb)->pkt_type = type; 
static inline int __recv_frame(struct hci_usb *husb, int type, void *data, int count){	BT_DBG("%s type %d data %p count %d", husb->hdev->name, type, data, count);	husb->hdev->stat.byte_rx += count;	while (count) {		struct sk_buff *skb = __reassembly(husb, type);		struct { int expect; } *scb;		int len = 0;			if (!skb) {			/* Start of the frame */			switch (type) {			case HCI_EVENT_PKT:				if (count >= HCI_EVENT_HDR_SIZE) {					struct hci_event_hdr *h = data;					len = HCI_EVENT_HDR_SIZE + h->plen;				} else					return -EILSEQ;				break;			case HCI_ACLDATA_PKT:				if (count >= HCI_ACL_HDR_SIZE) {					struct hci_acl_hdr *h = data;					len = HCI_ACL_HDR_SIZE + __le16_to_cpu(h->dlen);				} else					return -EILSEQ;				break;#ifdef CONFIG_BT_HCIUSB_SCO			case HCI_SCODATA_PKT:				if (count >= HCI_SCO_HDR_SIZE) {					struct hci_sco_hdr *h = data;					len = HCI_SCO_HDR_SIZE + h->dlen;				} else					return -EILSEQ;				break;#endif			}			BT_DBG("new packet len %d", len);			skb = bt_skb_alloc(len, GFP_ATOMIC);			if (!skb) {				BT_ERR("%s no memory for the packet", husb->hdev->name);				return -ENOMEM;			}			skb->dev = (void *) husb->hdev;			skb->pkt_type = type;				__reassembly(husb, type) = skb;			scb = (void *) skb->cb;			scb->expect = len;		} else {			/* Continuation */			scb = (void *) skb->cb;			len = scb->expect;		}		len = min(len, count);				memcpy(skb_put(skb, len), data, len);		scb->expect -= len;		if (!scb->expect) {			/* Complete frame */			__reassembly(husb, type) = NULL;			hci_recv_frame(skb);		}		count -= len; data += len;	}	return 0;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/0d48d93947dd9ea21c5cdc76a8581b06a4a39281/hci_usb.c/buggy/drivers/bluetooth/hci_usb.c