Index: chromeos/compat-wireless/net/bluetooth/rfcomm/sock.c |
diff --git a/chromeos/compat-wireless/net/bluetooth/rfcomm/sock.c b/chromeos/compat-wireless/net/bluetooth/rfcomm/sock.c |
index 321f85a27a0df8b3a75cb285f9ea5ba0412fd151..098ec5573ec111f73b6b1f2c94d00a4c60705b69 100644 |
--- a/chromeos/compat-wireless/net/bluetooth/rfcomm/sock.c |
+++ b/chromeos/compat-wireless/net/bluetooth/rfcomm/sock.c |
@@ -82,11 +82,14 @@ static void rfcomm_sk_data_ready(struct rfcomm_dlc *d, struct sk_buff *skb) |
static void rfcomm_sk_state_change(struct rfcomm_dlc *d, int err) |
{ |
struct sock *sk = d->owner, *parent; |
+ unsigned long flags; |
+ |
if (!sk) |
return; |
BT_DBG("dlc %p state %ld err %d", d, d->state, err); |
+ local_irq_save(flags); |
bh_lock_sock(sk); |
if (err) |
@@ -108,6 +111,7 @@ static void rfcomm_sk_state_change(struct rfcomm_dlc *d, int err) |
} |
bh_unlock_sock(sk); |
+ local_irq_restore(flags); |
if (parent && sock_flag(sk, SOCK_ZAPPED)) { |
/* We have to drop DLC lock here, otherwise |