aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/core
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/infiniband/core')
-rw-r--r--drivers/infiniband/core/sysfs.c26
1 files changed, 17 insertions, 9 deletions
diff --git a/drivers/infiniband/core/sysfs.c b/drivers/infiniband/core/sysfs.c
index 1f77072fa1fe..68fa798c007d 100644
--- a/drivers/infiniband/core/sysfs.c
+++ b/drivers/infiniband/core/sysfs.c
@@ -429,15 +429,19 @@ static void ib_port_release(struct kobject *kobj)
429 struct attribute *a; 429 struct attribute *a;
430 int i; 430 int i;
431 431
432 for (i = 0; (a = p->gid_group.attrs[i]); ++i) 432 if (p->gid_group.attrs) {
433 kfree(a); 433 for (i = 0; (a = p->gid_group.attrs[i]); ++i)
434 kfree(a);
434 435
435 kfree(p->gid_group.attrs); 436 kfree(p->gid_group.attrs);
437 }
436 438
437 for (i = 0; (a = p->pkey_group.attrs[i]); ++i) 439 if (p->pkey_group.attrs) {
438 kfree(a); 440 for (i = 0; (a = p->pkey_group.attrs[i]); ++i)
441 kfree(a);
439 442
440 kfree(p->pkey_group.attrs); 443 kfree(p->pkey_group.attrs);
444 }
441 445
442 kfree(p); 446 kfree(p);
443} 447}
@@ -536,8 +540,10 @@ static int add_port(struct ib_device *device, int port_num,
536 ret = kobject_init_and_add(&p->kobj, &port_type, 540 ret = kobject_init_and_add(&p->kobj, &port_type,
537 device->ports_parent, 541 device->ports_parent,
538 "%d", port_num); 542 "%d", port_num);
539 if (ret) 543 if (ret) {
540 goto err_put; 544 kfree(p);
545 return ret;
546 }
541 547
542 ret = sysfs_create_group(&p->kobj, &pma_group); 548 ret = sysfs_create_group(&p->kobj, &pma_group);
543 if (ret) 549 if (ret)
@@ -585,6 +591,7 @@ err_free_pkey:
585 kfree(p->pkey_group.attrs[i]); 591 kfree(p->pkey_group.attrs[i]);
586 592
587 kfree(p->pkey_group.attrs); 593 kfree(p->pkey_group.attrs);
594 p->pkey_group.attrs = NULL;
588 595
589err_remove_gid: 596err_remove_gid:
590 sysfs_remove_group(&p->kobj, &p->gid_group); 597 sysfs_remove_group(&p->kobj, &p->gid_group);
@@ -594,12 +601,13 @@ err_free_gid:
594 kfree(p->gid_group.attrs[i]); 601 kfree(p->gid_group.attrs[i]);
595 602
596 kfree(p->gid_group.attrs); 603 kfree(p->gid_group.attrs);
604 p->gid_group.attrs = NULL;
597 605
598err_remove_pma: 606err_remove_pma:
599 sysfs_remove_group(&p->kobj, &pma_group); 607 sysfs_remove_group(&p->kobj, &pma_group);
600 608
601err_put: 609err_put:
602 kfree(p); 610 kobject_put(&p->kobj);
603 return ret; 611 return ret;
604} 612}
605 613