Bluetooth: Add debug logs to help track locking issues
authorJohan Hedberg <johan.hedberg@intel.com>
Thu, 13 Nov 2014 12:37:50 +0000 (14:37 +0200)
committerMarcel Holtmann <marcel@holtmann.org>
Sat, 15 Nov 2014 00:53:27 +0000 (01:53 +0100)
This patch adds some extra debug logs to L2CAP related code. These are
mainly to help track locking issues but will probably be useful for
debugging other types of issues as well.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
net/bluetooth/l2cap_core.c
net/bluetooth/l2cap_sock.c

index 15784d32108d00571c26b1530330d4ef8173fd7f..8e127317302096959f64f2fc5af4556252b903b5 100644 (file)
@@ -570,7 +570,8 @@ void l2cap_chan_del(struct l2cap_chan *chan, int err)
 
        __clear_chan_timer(chan);
 
-       BT_DBG("chan %p, conn %p, err %d", chan, conn, err);
+       BT_DBG("chan %p, conn %p, err %d, state %s", chan, conn, err,
+              state_to_string(chan->state));
 
        chan->ops->teardown(chan, err);
 
index a5aa9f92b5e2c709b9541923058bf645eb5f467c..b0efb7202957cc4ae61781fb8642e1b30c9dd1f8 100644 (file)
@@ -1102,6 +1102,8 @@ static int l2cap_sock_shutdown(struct socket *sock, int how)
        chan = l2cap_pi(sk)->chan;
        conn = chan->conn;
 
+       BT_DBG("chan %p state %s", chan, state_to_string(chan->state));
+
        if (conn)
                mutex_lock(&conn->chan_lock);
 
@@ -1159,12 +1161,16 @@ static void l2cap_sock_cleanup_listen(struct sock *parent)
 {
        struct sock *sk;
 
-       BT_DBG("parent %p", parent);
+       BT_DBG("parent %p state %s", parent,
+              state_to_string(parent->sk_state));
 
        /* Close not yet accepted channels */
        while ((sk = bt_accept_dequeue(parent, NULL))) {
                struct l2cap_chan *chan = l2cap_pi(sk)->chan;
 
+               BT_DBG("child chan %p state %s", chan,
+                      state_to_string(chan->state));
+
                l2cap_chan_lock(chan);
                __clear_chan_timer(chan);
                l2cap_chan_close(chan, ECONNRESET);
@@ -1252,6 +1258,8 @@ static void l2cap_sock_teardown_cb(struct l2cap_chan *chan, int err)
        struct sock *sk = chan->data;
        struct sock *parent;
 
+       BT_DBG("chan %p state %s", chan, state_to_string(chan->state));
+
        /* This callback can be called both for server (BT_LISTEN)
         * sockets as well as "normal" ones. To avoid lockdep warnings
         * with child socket locking (through l2cap_sock_cleanup_listen)