Bluetooth: btusb: Free driver data on USB shutdown
authorDavid Herrmann <dh.herrmann@googlemail.com>
Sat, 7 Jan 2012 14:47:16 +0000 (15:47 +0100)
committerJohan Hedberg <johan.hedberg@intel.com>
Mon, 13 Feb 2012 15:01:23 +0000 (17:01 +0200)
Instead of using the hci-destruct callback we free our private driver
data on USB shutdown. We already called hci_unregister_dev() here so the
hci core will never ever call our callbacks again except the destruct
callback.

However, there is no reason to keep our *private* driver data alive if
we get never called again and the hci-core does never touch it the data.
So we simply free it right away and set the destruct callback to NULL.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
Acked-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
drivers/bluetooth/btusb.c

index 8bca784c0ea0ceb32bdd39fb3ac99a8e3422b10d..44b5e736ddc3bf97e4cc6b3fa07e48234701a0e8 100644 (file)
@@ -783,15 +783,6 @@ done:
        return err;
 }
 
-static void btusb_destruct(struct hci_dev *hdev)
-{
-       struct btusb_data *data = hdev->driver_data;
-
-       BT_DBG("%s", hdev->name);
-
-       kfree(data);
-}
-
 static void btusb_notify(struct hci_dev *hdev, unsigned int evt)
 {
        struct btusb_data *data = hdev->driver_data;
@@ -1004,7 +995,6 @@ static int btusb_probe(struct usb_interface *intf,
        hdev->close    = btusb_close;
        hdev->flush    = btusb_flush;
        hdev->send     = btusb_send_frame;
-       hdev->destruct = btusb_destruct;
        hdev->notify   = btusb_notify;
 
        hdev->owner = THIS_MODULE;
@@ -1108,6 +1098,7 @@ static void btusb_disconnect(struct usb_interface *intf)
        __hci_dev_put(hdev);
 
        hci_free_dev(hdev);
+       kfree(data);
 }
 
 #ifdef CONFIG_PM