Showing error 638

User: Jiri Slaby
Error type: Double Unlock
Error type description: Some lock is unlocked twice unintentionally in a sequence
File location: drivers/infiniband/hw/ipath/ipath_driver.c
Line in file: 229
Project: Linux Kernel
Project version: 2.6.28
Tools: Stanse (1.2)
Entered: 2011-11-07 22:20:57 UTC


Source:

 199        if (!idr_pre_get(&unit_table, GFP_KERNEL)) {
 200                dd = ERR_PTR(-ENOMEM);
 201                goto bail;
 202        }
 203
 204        dd = vmalloc(sizeof(*dd));
 205        if (!dd) {
 206                dd = ERR_PTR(-ENOMEM);
 207                goto bail;
 208        }
 209        memset(dd, 0, sizeof(*dd));
 210        dd->ipath_unit = -1;
 211
 212        spin_lock_irqsave(&ipath_devs_lock, flags);
 213
 214        ret = idr_get_new(&unit_table, dd, &dd->ipath_unit);
 215        if (ret < 0) {
 216                printk(KERN_ERR IPATH_DRV_NAME
 217                       ": Could not allocate unit ID: error %d\n", -ret);
 218                ipath_free_devdata(pdev, dd);
 219                dd = ERR_PTR(ret);
 220                goto bail_unlock;
 221        }
 222
 223        dd->pcidev = pdev;
 224        pci_set_drvdata(pdev, dd);
 225
 226        list_add(&dd->ipath_list, &ipath_dev_list);
 227
 228bail_unlock:
 229        spin_unlock_irqrestore(&ipath_devs_lock, flags);
 230
 231bail:
 232        return dd;
 233}
 234
 235static inline struct ipath_devdata *__ipath_lookup(int unit)
 236{
 237        return idr_find(&unit_table, unit);
 238}
 239
Show full sources