Bluetooth: btsdio: Free driver data on SDIO shutdown
authorDavid Herrmann <dh.herrmann@googlemail.com>
Sat, 7 Jan 2012 14:47:18 +0000 (15:47 +0100)
committerJohan Hedberg <johan.hedberg@intel.com>
Mon, 13 Feb 2012 15:01:24 +0000 (17:01 +0200)
Instead of waiting for the hdev object to get freed we now free the
private driver-internal data on SDIO shutdown. This allows us to remove
the obsolete hci-destruct callback and free our data object right away
after calling hci_unregister_dev(). The HCI-core does not call any
callbacks after this so we are never called again and can safely exit
the module.

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/btsdio.c

index 792e32d29a1de981c3bf84ad15a4e7899a94ec5a..d38945cc9f05320ea7d951ad87badd829ec34605 100644 (file)
@@ -289,15 +289,6 @@ static int btsdio_send_frame(struct sk_buff *skb)
        return 0;
 }
 
-static void btsdio_destruct(struct hci_dev *hdev)
-{
-       struct btsdio_data *data = hdev->driver_data;
-
-       BT_DBG("%s", hdev->name);
-
-       kfree(data);
-}
-
 static int btsdio_probe(struct sdio_func *func,
                                const struct sdio_device_id *id)
 {
@@ -345,7 +336,6 @@ static int btsdio_probe(struct sdio_func *func,
        hdev->close    = btsdio_close;
        hdev->flush    = btsdio_flush;
        hdev->send     = btsdio_send_frame;
-       hdev->destruct = btsdio_destruct;
 
        hdev->owner = THIS_MODULE;
 
@@ -378,6 +368,7 @@ static void btsdio_remove(struct sdio_func *func)
        hci_unregister_dev(hdev);
 
        hci_free_dev(hdev);
+       kfree(data);
 }
 
 static struct sdio_driver btsdio_driver = {