int proto, gfp_t prio);
 
 struct l2cap_chan *l2cap_chan_create(struct sock *sk);
-void __l2cap_chan_close(struct l2cap_chan *chan, int reason);
+void l2cap_chan_close(struct l2cap_chan *chan, int reason);
 void l2cap_chan_destroy(struct l2cap_chan *chan);
 int l2cap_chan_connect(struct l2cap_chan *chan);
 int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len);
 
        else
                reason = ETIMEDOUT;
 
-       __l2cap_chan_close(chan, reason);
+       l2cap_chan_close(chan, reason);
 
        bh_unlock_sock(sk);
 
        }
 }
 
-/* Must be called on unlocked socket. */
-static void l2cap_chan_close(struct sock *sk)
-{
-       l2cap_chan_clear_timer(l2cap_pi(sk)->chan);
-       lock_sock(sk);
-       __l2cap_chan_close(l2cap_pi(sk)->chan, ECONNRESET);
-       release_sock(sk);
-       l2cap_sock_kill(sk);
-}
-
 static void l2cap_chan_cleanup_listen(struct sock *parent)
 {
        struct sock *sk;
        BT_DBG("parent %p", parent);
 
        /* Close not yet accepted channels */
-       while ((sk = bt_accept_dequeue(parent, NULL)))
-               l2cap_chan_close(sk);
+       while ((sk = bt_accept_dequeue(parent, NULL))) {
+               l2cap_chan_clear_timer(l2cap_pi(sk)->chan);
+               lock_sock(sk);
+               l2cap_chan_close(l2cap_pi(sk)->chan, ECONNRESET);
+               release_sock(sk);
+               l2cap_sock_kill(sk);
+       }
 
        parent->sk_state = BT_CLOSED;
        sock_set_flag(parent, SOCK_ZAPPED);
 }
 
-void __l2cap_chan_close(struct l2cap_chan *chan, int reason)
+void l2cap_chan_close(struct l2cap_chan *chan, int reason)
 {
        struct l2cap_conn *conn = chan->conn;
        struct sock *sk = chan->sk;
                                        conn->feat_mask)
                                        && chan->conf_state &
                                        L2CAP_CONF_STATE2_DEVICE) {
-                               /* __l2cap_chan_close() calls list_del(chan)
+                               /* l2cap_chan_close() calls list_del(chan)
                                 * so release the lock */
                                read_unlock_bh(&conn->chan_lock);
-                                __l2cap_chan_close(chan, ECONNRESET);
+                                l2cap_chan_close(chan, ECONNRESET);
                                read_lock_bh(&conn->chan_lock);
                                bh_unlock_sock(sk);
                                continue;
                        l2cap_chan_clear_timer(chan);
                        l2cap_chan_set_timer(chan, HZ * 5);
                } else if (chan->sec_level == BT_SECURITY_HIGH)
-                       __l2cap_chan_close(chan, ECONNREFUSED);
+                       l2cap_chan_close(chan, ECONNREFUSED);
        } else {
                if (chan->sec_level == BT_SECURITY_MEDIUM)
                        l2cap_chan_clear_timer(chan);
 
                        err = __l2cap_wait_ack(sk);
 
                sk->sk_shutdown = SHUTDOWN_MASK;
-               __l2cap_chan_close(chan, 0);
+               l2cap_chan_close(chan, 0);
 
                if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime)
                        err = bt_sock_wait_state(sk, BT_CLOSED,