Bluetooth: Add one more buffer for HCI stream reassembly
authorSuraj Sumangala <suraj@atheros.com>
Wed, 14 Jul 2010 07:32:16 +0000 (13:02 +0530)
committerMarcel Holtmann <marcel@holtmann.org>
Wed, 21 Jul 2010 17:39:12 +0000 (10:39 -0700)
Additional reassembly buffer to keep track of stream reasembly

Signed-off-by: Suraj Sumangala <suraj@atheros.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
include/net/bluetooth/hci_core.h
net/bluetooth/hci_core.c

index 600372d4457846663274220d0fef574bef977e5c..28e5eeefdec8d70f00c65e0f05538890f933de0d 100644 (file)
@@ -66,7 +66,7 @@ struct bdaddr_list {
        struct list_head list;
        bdaddr_t bdaddr;
 };
-
+#define NUM_REASSEMBLY 4
 struct hci_dev {
        struct list_head list;
        spinlock_t      lock;
@@ -123,7 +123,7 @@ struct hci_dev {
        struct sk_buff_head     cmd_q;
 
        struct sk_buff          *sent_cmd;
-       struct sk_buff          *reassembly[3];
+       struct sk_buff          *reassembly[NUM_REASSEMBLY];
 
        struct mutex            req_lock;
        wait_queue_head_t       req_wait_q;
index aeb2982310a08dbf047591607f0186fb06e18408..0ded790bfb679277db0f19f1b88da2571830813a 100644 (file)
@@ -914,7 +914,7 @@ int hci_register_dev(struct hci_dev *hdev)
        skb_queue_head_init(&hdev->cmd_q);
        skb_queue_head_init(&hdev->raw_q);
 
-       for (i = 0; i < 3; i++)
+       for (i = 0; i < NUM_REASSEMBLY; i++)
                hdev->reassembly[i] = NULL;
 
        init_waitqueue_head(&hdev->req_wait_q);
@@ -973,7 +973,7 @@ int hci_unregister_dev(struct hci_dev *hdev)
 
        hci_dev_do_close(hdev);
 
-       for (i = 0; i < 3; i++)
+       for (i = 0; i < NUM_REASSEMBLY; i++)
                kfree_skb(hdev->reassembly[i]);
 
        hci_notify(hdev, HCI_DEV_UNREG);
@@ -1034,7 +1034,7 @@ int hci_recv_frame(struct sk_buff *skb)
 EXPORT_SYMBOL(hci_recv_frame);
 
 /* Receive packet type fragment */
-#define __reassembly(hdev, type)  ((hdev)->reassembly[(type) - 2])
+#define __reassembly(hdev, type)  ((hdev)->reassembly[(type) - 1])
 
 int hci_recv_fragment(struct hci_dev *hdev, int type, void *data, int count)
 {