diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2015-04-05 04:59:25 (GMT) |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2015-04-07 16:47:10 (GMT) |
commit | c27799f99f589e76ea84642508a32638091a409a (patch) | |
tree | f14857fd52bf495c16b287b76689ab7cb6e1f6cb | |
parent | e1a38d70d8e07db6fbf93621f289c08bbcca0ba3 (diff) | |
download | linux-c27799f99f589e76ea84642508a32638091a409a.tar.xz |
Bluetooth: hci_uart: Use h4_recv_buf helper for H:4 protocol
Instead of using hci_recv_stream_fragment, use the local available
h4_recv_buf helper function.
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
-rw-r--r-- | drivers/bluetooth/hci_h4.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/drivers/bluetooth/hci_h4.c b/drivers/bluetooth/hci_h4.c index 09270bc..d841454 100644 --- a/drivers/bluetooth/hci_h4.c +++ b/drivers/bluetooth/hci_h4.c @@ -49,6 +49,7 @@ #define VERSION "1.2" struct h4_struct { + struct sk_buff *rx_skb; struct sk_buff_head txq; }; @@ -92,6 +93,8 @@ static int h4_close(struct hci_uart *hu) skb_queue_purge(&h4->txq); + kfree_skb(h4->rx_skb); + hu->priv = NULL; kfree(h4); @@ -115,15 +118,16 @@ static int h4_enqueue(struct hci_uart *hu, struct sk_buff *skb) /* Recv data */ static int h4_recv(struct hci_uart *hu, const void *data, int count) { - int ret; + struct h4_struct *h4 = hu->priv; if (!test_bit(HCI_UART_REGISTERED, &hu->flags)) return -EUNATCH; - ret = hci_recv_stream_fragment(hu->hdev, data, count); - if (ret < 0) { - BT_ERR("Frame Reassembly Failed"); - return ret; + h4->rx_skb = h4_recv_buf(hu->hdev, h4->rx_skb, data, count); + if (IS_ERR(h4->rx_skb)) { + int err = PTR_ERR(h4->rx_skb); + BT_ERR("%s: Frame reassembly failed (%d)", hu->hdev->name, err); + return err; } return count; |