diff options
Diffstat (limited to 'drivers/infiniband/core')
-rw-r--r-- | drivers/infiniband/core/sysfs.c | 26 |
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 | ||
589 | err_remove_gid: | 596 | err_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 | ||
598 | err_remove_pma: | 606 | err_remove_pma: |
599 | sysfs_remove_group(&p->kobj, &pma_group); | 607 | sysfs_remove_group(&p->kobj, &pma_group); |
600 | 608 | ||
601 | err_put: | 609 | err_put: |
602 | kfree(p); | 610 | kobject_put(&p->kobj); |
603 | return ret; | 611 | return ret; |
604 | } | 612 | } |
605 | 613 | ||