}
 
 /* Send frame to sockets with specific channel */
-void hci_send_to_channel(unsigned short channel, struct sk_buff *skb,
-                        int flag, struct sock *skip_sk)
+static void __hci_send_to_channel(unsigned short channel, struct sk_buff *skb,
+                                 int flag, struct sock *skip_sk)
 {
        struct sock *sk;
 
        BT_DBG("channel %u len %d", channel, skb->len);
 
-       read_lock(&hci_sk_list.lock);
-
        sk_for_each(sk, &hci_sk_list.head) {
                struct sk_buff *nskb;
 
                        kfree_skb(nskb);
        }
 
+}
+
+void hci_send_to_channel(unsigned short channel, struct sk_buff *skb,
+                        int flag, struct sock *skip_sk)
+{
+       read_lock(&hci_sk_list.lock);
+       __hci_send_to_channel(channel, skb, flag, skip_sk);
        read_unlock(&hci_sk_list.lock);
 }
 
                hdr->index = index;
                hdr->len = cpu_to_le16(skb->len - HCI_MON_HDR_SIZE);
 
-               hci_send_to_channel(HCI_CHANNEL_MONITOR, skb,
-                                   HCI_SOCK_TRUSTED, NULL);
+               __hci_send_to_channel(HCI_CHANNEL_MONITOR, skb,
+                                     HCI_SOCK_TRUSTED, NULL);
                kfree_skb(skb);
        }