Bluetooth: Improve *_get() functions to return the object type

It's natural to have *_get() functions that increment the reference
count of an object to return the object type itself. This way it's
simple to make a copy of the object pointer and increase the reference
count in a single step. This patch updates two such get() functions,
namely hci_conn_get() and l2cap_conn_get(), and updates the users to
take advantage of the new API.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
This commit is contained in:
Johan Hedberg 2014-08-15 21:06:57 +03:00 committed by Marcel Holtmann
parent 5477610fc1
commit 51bb8457dd
4 changed files with 10 additions and 11 deletions

View File

@ -756,9 +756,10 @@ void hci_le_conn_failed(struct hci_conn *conn, u8 status);
* _get()/_drop() in it, but require the caller to have a valid ref (FIXME). * _get()/_drop() in it, but require the caller to have a valid ref (FIXME).
*/ */
static inline void hci_conn_get(struct hci_conn *conn) static inline struct hci_conn *hci_conn_get(struct hci_conn *conn)
{ {
get_device(&conn->dev); get_device(&conn->dev);
return conn;
} }
static inline void hci_conn_put(struct hci_conn *conn) static inline void hci_conn_put(struct hci_conn *conn)

View File

@ -948,7 +948,7 @@ void l2cap_logical_cfm(struct l2cap_chan *chan, struct hci_chan *hchan,
void __l2cap_physical_cfm(struct l2cap_chan *chan, int result); void __l2cap_physical_cfm(struct l2cap_chan *chan, int result);
void l2cap_conn_shutdown(struct l2cap_conn *conn, int err); void l2cap_conn_shutdown(struct l2cap_conn *conn, int err);
void l2cap_conn_get(struct l2cap_conn *conn); struct l2cap_conn *l2cap_conn_get(struct l2cap_conn *conn);
void l2cap_conn_put(struct l2cap_conn *conn); void l2cap_conn_put(struct l2cap_conn *conn);
int l2cap_register_user(struct l2cap_conn *conn, struct l2cap_user *user); int l2cap_register_user(struct l2cap_conn *conn, struct l2cap_user *user);

View File

@ -915,7 +915,7 @@ static int hidp_session_new(struct hidp_session **out, const bdaddr_t *bdaddr,
/* connection management */ /* connection management */
bacpy(&session->bdaddr, bdaddr); bacpy(&session->bdaddr, bdaddr);
session->conn = conn; session->conn = l2cap_conn_get(conn);
session->user.probe = hidp_session_probe; session->user.probe = hidp_session_probe;
session->user.remove = hidp_session_remove; session->user.remove = hidp_session_remove;
session->ctrl_sock = ctrl_sock; session->ctrl_sock = ctrl_sock;
@ -941,13 +941,13 @@ static int hidp_session_new(struct hidp_session **out, const bdaddr_t *bdaddr,
if (ret) if (ret)
goto err_free; goto err_free;
l2cap_conn_get(session->conn);
get_file(session->intr_sock->file); get_file(session->intr_sock->file);
get_file(session->ctrl_sock->file); get_file(session->ctrl_sock->file);
*out = session; *out = session;
return 0; return 0;
err_free: err_free:
l2cap_conn_put(session->conn);
kfree(session); kfree(session);
return ret; return ret;
} }
@ -1327,10 +1327,8 @@ int hidp_connection_add(struct hidp_connadd_req *req,
conn = NULL; conn = NULL;
l2cap_chan_lock(chan); l2cap_chan_lock(chan);
if (chan->conn) { if (chan->conn)
l2cap_conn_get(chan->conn); conn = l2cap_conn_get(chan->conn);
conn = chan->conn;
}
l2cap_chan_unlock(chan); l2cap_chan_unlock(chan);
if (!conn) if (!conn)

View File

@ -1695,9 +1695,10 @@ static void l2cap_conn_free(struct kref *ref)
kfree(conn); kfree(conn);
} }
void l2cap_conn_get(struct l2cap_conn *conn) struct l2cap_conn *l2cap_conn_get(struct l2cap_conn *conn)
{ {
kref_get(&conn->ref); kref_get(&conn->ref);
return conn;
} }
EXPORT_SYMBOL(l2cap_conn_get); EXPORT_SYMBOL(l2cap_conn_get);
@ -6908,8 +6909,7 @@ static struct l2cap_conn *l2cap_conn_add(struct hci_conn *hcon)
kref_init(&conn->ref); kref_init(&conn->ref);
hcon->l2cap_data = conn; hcon->l2cap_data = conn;
conn->hcon = hcon; conn->hcon = hci_conn_get(hcon);
hci_conn_get(conn->hcon);
conn->hchan = hchan; conn->hchan = hchan;
BT_DBG("hcon %p conn %p hchan %p", hcon, conn, hchan); BT_DBG("hcon %p conn %p hchan %p", hcon, conn, hchan);