aboutsummaryrefslogtreecommitdiffstats
path: root/net/bluetooth
diff options
context:
space:
mode:
authorAndrei Emeltchenko <andrei.emeltchenko@intel.com>2012-10-18 13:16:19 +0300
committerGustavo Padovan <gustavo.padovan@collabora.co.uk>2012-10-18 07:27:20 -0300
commitf706adfeade767d2194c9f39c0f75e944b0bdd23 (patch)
treea047952d3ce06440c9743cc5b582079d5df37030 /net/bluetooth
parentBluetooth: Zero bredr pointer when chan is deleted (diff)
downloadlinux-dev-f706adfeade767d2194c9f39c0f75e944b0bdd23.tar.xz
linux-dev-f706adfeade767d2194c9f39c0f75e944b0bdd23.zip
Bluetooth: AMP: Get amp_mgr reference in HS hci_conn
When assigning amp_mgr in hci_conn (type AMP_LINK) get also reference. In hci_conn_del those references would be put for both conn types AMP_LINK and ACL_LINK associated with amp_mgr. Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com> Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
Diffstat (limited to 'net/bluetooth')
-rw-r--r--net/bluetooth/a2mp.c4
-rw-r--r--net/bluetooth/amp.c2
2 files changed, 4 insertions, 2 deletions
diff --git a/net/bluetooth/a2mp.c b/net/bluetooth/a2mp.c
index 7bf9a10d8e46..d5136cfb57e2 100644
--- a/net/bluetooth/a2mp.c
+++ b/net/bluetooth/a2mp.c
@@ -751,11 +751,13 @@ static struct l2cap_chan *a2mp_chan_open(struct l2cap_conn *conn, bool locked)
}
/* AMP Manager functions */
-void amp_mgr_get(struct amp_mgr *mgr)
+struct amp_mgr *amp_mgr_get(struct amp_mgr *mgr)
{
BT_DBG("mgr %p orig refcnt %d", mgr, atomic_read(&mgr->kref.refcount));
kref_get(&mgr->kref);
+
+ return mgr;
}
static void amp_mgr_destroy(struct kref *kref)
diff --git a/net/bluetooth/amp.c b/net/bluetooth/amp.c
index 59da0f15818e..231d7ef53ecb 100644
--- a/net/bluetooth/amp.c
+++ b/net/bluetooth/amp.c
@@ -123,7 +123,7 @@ struct hci_conn *phylink_add(struct hci_dev *hdev, struct amp_mgr *mgr,
hcon->attempt++;
hcon->handle = __next_handle(mgr);
hcon->remote_id = remote_id;
- hcon->amp_mgr = mgr;
+ hcon->amp_mgr = amp_mgr_get(mgr);
hcon->out = out;
return hcon;