diff --git a/net/bluetooth/hci_conn.c b/net/bluetooth/hci_conn.c index 61309b2..85a1c6b 100644 --- a/net/bluetooth/hci_conn.c +++ b/net/bluetooth/hci_conn.c @@ -292,6 +292,8 @@ int hci_conn_del(struct hci_conn *conn) hci_conn_del_sysfs(conn); + hci_dev_put(hdev); + return 0; } diff --git a/net/bluetooth/hci_sysfs.c b/net/bluetooth/hci_sysfs.c index a05d45e..cd84cd4 100644 --- a/net/bluetooth/hci_sysfs.c +++ b/net/bluetooth/hci_sysfs.c @@ -99,6 +99,8 @@ static void add_conn(struct work_struct *work) BT_ERR("Failed to register connection device"); return; } + + hci_dev_hold(hdev); } /* @@ -120,7 +122,7 @@ static void del_conn(struct work_struct *work) flush_work(&conn->work_add); if (!device_is_registered(&conn->dev)) - return; + goto done; while (1) { struct device *dev; @@ -134,6 +136,8 @@ static void del_conn(struct work_struct *work) device_del(&conn->dev); put_device(&conn->dev); + +done: hci_dev_put(hdev); }