Showing error 1226

User: Jiri Slaby
Error type: Double Unlock
Error type description: Some lock is unlocked twice unintentionally in a sequence
File location: drivers/net/ns83820.c
Line in file: 599
Project: Linux Kernel
Project version: 2.6.28
Tools: Stanse (1.2)
Entered: 2012-04-30 10:52:00 UTC


Source:

 569
 570        return 0;
 571}
 572
 573static inline int rx_refill(struct net_device *ndev, gfp_t gfp)
 574{
 575        struct ns83820 *dev = PRIV(ndev);
 576        unsigned i;
 577        unsigned long flags = 0;
 578
 579        if (unlikely(nr_rx_empty(dev) <= 2))
 580                return 0;
 581
 582        dprintk("rx_refill(%p)\n", ndev);
 583        if (gfp == GFP_ATOMIC)
 584                spin_lock_irqsave(&dev->rx_info.lock, flags);
 585        for (i=0; i<NR_RX_DESC; i++) {
 586                struct sk_buff *skb;
 587                long res;
 588
 589                /* extra 16 bytes for alignment */
 590                skb = __netdev_alloc_skb(ndev, REAL_RX_BUF_SIZE+16, gfp);
 591                if (unlikely(!skb))
 592                        break;
 593
 594                skb_reserve(skb, skb->data - PTR_ALIGN(skb->data, 16));
 595                if (gfp != GFP_ATOMIC)
 596                        spin_lock_irqsave(&dev->rx_info.lock, flags);
 597                res = ns83820_add_rx_skb(dev, skb);
 598                if (gfp != GFP_ATOMIC)
 599                        spin_unlock_irqrestore(&dev->rx_info.lock, flags);
 600                if (res) {
 601                        i = 1;
 602                        break;
 603                }
 604        }
 605        if (gfp == GFP_ATOMIC)
 606                spin_unlock_irqrestore(&dev->rx_info.lock, flags);
 607
 608        return i ? 0 : -ENOMEM;
 609}
Show full sources