| Index: chromeos/compat-wireless/include/net/bluetooth/bluetooth.h
|
| diff --git a/chromeos/compat-wireless/include/net/bluetooth/bluetooth.h b/chromeos/compat-wireless/include/net/bluetooth/bluetooth.h
|
| index 27a902d9b3a9a431c6b3162a4c6fe479aa99504c..30fce0128dd72fa0281795bc0ae03809b85bc9d0 100644
|
| --- a/chromeos/compat-wireless/include/net/bluetooth/bluetooth.h
|
| +++ b/chromeos/compat-wireless/include/net/bluetooth/bluetooth.h
|
| @@ -161,12 +161,30 @@ static inline struct sk_buff *bt_skb_send_alloc(struct sock *sk, unsigned long l
|
| {
|
| struct sk_buff *skb;
|
|
|
| + release_sock(sk);
|
| if ((skb = sock_alloc_send_skb(sk, len + BT_SKB_RESERVE, nb, err))) {
|
| skb_reserve(skb, BT_SKB_RESERVE);
|
| bt_cb(skb)->incoming = 0;
|
| }
|
| + lock_sock(sk);
|
| +
|
| + if (!skb && *err)
|
| + return NULL;
|
| +
|
| + *err = sock_error(sk);
|
| + if (*err)
|
| + goto out;
|
| +
|
| + if (sk->sk_shutdown) {
|
| + *err = -ECONNRESET;
|
| + goto out;
|
| + }
|
|
|
| return skb;
|
| +
|
| +out:
|
| + kfree_skb(skb);
|
| + return NULL;
|
| }
|
|
|
| int bt_err(__u16 code);
|
|
|