| .. | .. |
|---|
| 830 | 830 | |
|---|
| 831 | 831 | dev_set_name(&ctlr->dev, "ctlr_%d", ctlr->id); |
|---|
| 832 | 832 | error = device_register(&ctlr->dev); |
|---|
| 833 | | - if (error) |
|---|
| 834 | | - goto out_del_q2; |
|---|
| 833 | + if (error) { |
|---|
| 834 | + destroy_workqueue(ctlr->devloss_work_q); |
|---|
| 835 | + destroy_workqueue(ctlr->work_q); |
|---|
| 836 | + put_device(&ctlr->dev); |
|---|
| 837 | + return NULL; |
|---|
| 838 | + } |
|---|
| 835 | 839 | |
|---|
| 836 | 840 | return ctlr; |
|---|
| 837 | 841 | |
|---|
| 838 | | -out_del_q2: |
|---|
| 839 | | - destroy_workqueue(ctlr->devloss_work_q); |
|---|
| 840 | | - ctlr->devloss_work_q = NULL; |
|---|
| 841 | 842 | out_del_q: |
|---|
| 842 | 843 | destroy_workqueue(ctlr->work_q); |
|---|
| 843 | 844 | ctlr->work_q = NULL; |
|---|
| .. | .. |
|---|
| 1036 | 1037 | fcf->selected = new_fcf->selected; |
|---|
| 1037 | 1038 | |
|---|
| 1038 | 1039 | error = device_register(&fcf->dev); |
|---|
| 1039 | | - if (error) |
|---|
| 1040 | | - goto out_del; |
|---|
| 1040 | + if (error) { |
|---|
| 1041 | + put_device(&fcf->dev); |
|---|
| 1042 | + goto out; |
|---|
| 1043 | + } |
|---|
| 1041 | 1044 | |
|---|
| 1042 | 1045 | fcf->state = FCOE_FCF_STATE_CONNECTED; |
|---|
| 1043 | 1046 | list_add_tail(&fcf->peers, &ctlr->fcfs); |
|---|
| 1044 | 1047 | |
|---|
| 1045 | 1048 | return fcf; |
|---|
| 1046 | 1049 | |
|---|
| 1047 | | -out_del: |
|---|
| 1048 | | - kfree(fcf); |
|---|
| 1049 | 1050 | out: |
|---|
| 1050 | 1051 | return NULL; |
|---|
| 1051 | 1052 | } |
|---|