--- zzzz-none-000/linux-2.6.19.2/drivers/infiniband/hw/amso1100/c2_provider.c 2007-01-10 19:10:37.000000000 +0000 +++ davinci-8020-5505/linux-2.6.19.2/drivers/infiniband/hw/amso1100/c2_provider.c 2007-01-11 07:38:19.000000000 +0000 @@ -757,17 +757,20 @@ int c2_register_device(struct c2_dev *dev) { - int ret = -ENOMEM; + int ret; int i; /* Register pseudo network device */ dev->pseudo_netdev = c2_pseudo_netdev_init(dev); - if (!dev->pseudo_netdev) - goto out3; - - ret = register_netdev(dev->pseudo_netdev); - if (ret) - goto out2; + if (dev->pseudo_netdev) { + ret = register_netdev(dev->pseudo_netdev); + if (ret) { + printk(KERN_ERR PFX + "Unable to register netdev, ret = %d\n", ret); + free_netdev(dev->pseudo_netdev); + return ret; + } + } pr_debug("%s:%u\n", __FUNCTION__, __LINE__); strlcpy(dev->ibdev.name, "amso%d", IB_DEVICE_NAME_MAX); @@ -845,25 +848,21 @@ ret = ib_register_device(&dev->ibdev); if (ret) - goto out1; + return ret; for (i = 0; i < ARRAY_SIZE(c2_class_attributes); ++i) { ret = class_device_create_file(&dev->ibdev.class_dev, c2_class_attributes[i]); - if (ret) - goto out0; + if (ret) { + unregister_netdev(dev->pseudo_netdev); + free_netdev(dev->pseudo_netdev); + ib_unregister_device(&dev->ibdev); + return ret; + } } - goto out3; -out0: - ib_unregister_device(&dev->ibdev); -out1: - unregister_netdev(dev->pseudo_netdev); -out2: - free_netdev(dev->pseudo_netdev); -out3: - pr_debug("%s:%u ret=%d\n", __FUNCTION__, __LINE__, ret); - return ret; + pr_debug("%s:%u\n", __FUNCTION__, __LINE__); + return 0; } void c2_unregister_device(struct c2_dev *dev)