|
@@ -3621,13 +3621,14 @@ struct sk_buff *sock_dequeue_err_skb(struct sock *sk)
|
|
|
{
|
|
|
struct sk_buff_head *q = &sk->sk_error_queue;
|
|
|
struct sk_buff *skb, *skb_next;
|
|
|
+ unsigned long flags;
|
|
|
int err = 0;
|
|
|
|
|
|
- spin_lock_bh(&q->lock);
|
|
|
+ spin_lock_irqsave(&q->lock, flags);
|
|
|
skb = __skb_dequeue(q);
|
|
|
if (skb && (skb_next = skb_peek(q)))
|
|
|
err = SKB_EXT_ERR(skb_next)->ee.ee_errno;
|
|
|
- spin_unlock_bh(&q->lock);
|
|
|
+ spin_unlock_irqrestore(&q->lock, flags);
|
|
|
|
|
|
sk->sk_err = err;
|
|
|
if (err)
|