From: David Herrmann Date: Sat, 7 Jan 2012 14:47:17 +0000 (+0100) Subject: Bluetooth: bpa10x: Free private driver data on usb shutdown X-Git-Tag: v3.4-rc1~177^2~112^2~245 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=d25442ba4b44bf1fad50c9c2156a4ca89f269713;p=karo-tx-linux.git Bluetooth: bpa10x: Free private driver data on usb shutdown Instead of waiting for the hci-device to be destroyed we now free the private driver data on driver shutdown right away. We call hci_unregister_dev() on driver shutdown, that means, the hci-core will never ever call our callbacks again except the destruct callback. It also does not access hdev->driver_data so there is no reason to keep that alive. We simply set the destruct cb to NULL to avoid getting called again. Signed-off-by: David Herrmann Acked-by: Marcel Holtmann Signed-off-by: Johan Hedberg --- diff --git a/drivers/bluetooth/bpa10x.c b/drivers/bluetooth/bpa10x.c index 62831603de5e..29cd11d401e1 100644 --- a/drivers/bluetooth/bpa10x.c +++ b/drivers/bluetooth/bpa10x.c @@ -432,17 +432,6 @@ static int bpa10x_send_frame(struct sk_buff *skb) return 0; } -static void bpa10x_destruct(struct hci_dev *hdev) -{ - struct bpa10x_data *data = hdev->driver_data; - - BT_DBG("%s", hdev->name); - - kfree_skb(data->rx_skb[0]); - kfree_skb(data->rx_skb[1]); - kfree(data); -} - static int bpa10x_probe(struct usb_interface *intf, const struct usb_device_id *id) { struct bpa10x_data *data; @@ -480,7 +469,6 @@ static int bpa10x_probe(struct usb_interface *intf, const struct usb_device_id * hdev->close = bpa10x_close; hdev->flush = bpa10x_flush; hdev->send = bpa10x_send_frame; - hdev->destruct = bpa10x_destruct; hdev->owner = THIS_MODULE; @@ -512,6 +500,9 @@ static void bpa10x_disconnect(struct usb_interface *intf) hci_unregister_dev(data->hdev); hci_free_dev(data->hdev); + kfree_skb(data->rx_skb[0]); + kfree_skb(data->rx_skb[1]); + kfree(data); } static struct usb_driver bpa10x_driver = {