]> err.no Git - linux-2.6/commitdiff
[SCTP]: Replace spin_lock_irqsave with spin_lock_bh
authorHerbert Xu <herbert@gondor.apana.org.au>
Sun, 19 Jun 2005 05:56:42 +0000 (22:56 -0700)
committerDavid S. Miller <davem@davemloft.net>
Sun, 19 Jun 2005 05:56:42 +0000 (22:56 -0700)
This patch replaces the spin_lock_irqsave call on the receive queue
lock in SCTP with spin_lock_bh.  Despite the proliferation of
spin_lock_irqsave calls in this stack, it is only entered from the
IPv4/IPv6 stack and user space.  That is, it is never entered from
hardirq context.

The call in question is only called from recvmsg which means that
IRQs aren't disabled.  Therefore it is safe to replace it with
spin_lock_bh.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sctp/socket.c

index 2a3c0e08a090eedf7c9a41d96cc7f263e002730b..e6926cb1942078d1c3fa5d9eb15fc21dead93d33 100644 (file)
@@ -4368,15 +4368,11 @@ static struct sk_buff *sctp_skb_recv_datagram(struct sock *sk, int flags,
                 *  However, this function was corrent in any case. 8)
                 */
                if (flags & MSG_PEEK) {
-                       unsigned long cpu_flags;
-
-                       sctp_spin_lock_irqsave(&sk->sk_receive_queue.lock,
-                                              cpu_flags);
+                       spin_lock_bh(&sk->sk_receive_queue.lock);
                        skb = skb_peek(&sk->sk_receive_queue);
                        if (skb)
                                atomic_inc(&skb->users);
-                       sctp_spin_unlock_irqrestore(&sk->sk_receive_queue.lock,
-                                                   cpu_flags);
+                       spin_unlock_bh(&sk->sk_receive_queue.lock);
                } else {
                        skb = skb_dequeue(&sk->sk_receive_queue);
                }