aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinas Vepstas <linas@austin.ibm.com>2007-04-13 18:34:09 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2007-05-02 22:02:38 -0400
commit31be7586d1122538747519d786408f142f59dd46 (patch)
tree2afc171419c60084a142164b1da6ca17aeded4ef
parentfa1891596ca252e48e8803738fd8ead5b3082217 (diff)
PCI: rpaphp: match up alloc and free in same routine
The routine that called an alloc should be the same routine that calles the mathcing free, if anything in the middle failed. Signed-off-by: Linas Vepstas <linas@austin.ibm.com> Cc: John Rose <johnrose@austin.ibm.com> Signed-off-by: Kristen Carlson Accardi <kristen.c.accardi@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r--drivers/pci/hotplug/rpaphp_core.c5
-rw-r--r--drivers/pci/hotplug/rpaphp_pci.c1
-rw-r--r--drivers/pci/hotplug/rpaphp_slot.c1
3 files changed, 5 insertions, 2 deletions
diff --git a/drivers/pci/hotplug/rpaphp_core.c b/drivers/pci/hotplug/rpaphp_core.c
index 3afd154bf543..ca95e1515d6f 100644
--- a/drivers/pci/hotplug/rpaphp_core.c
+++ b/drivers/pci/hotplug/rpaphp_core.c
@@ -321,10 +321,15 @@ int rpaphp_add_slot(struct device_node *dn)
321 indexes[i + 1], name, type); 321 indexes[i + 1], name, type);
322 322
323 retval = rpaphp_register_pci_slot(slot); 323 retval = rpaphp_register_pci_slot(slot);
324 if (retval)
325 dealloc_slot_struct(slot);
326
324 name += strlen(name) + 1; 327 name += strlen(name) + 1;
325 type += strlen(type) + 1; 328 type += strlen(type) + 1;
326 } 329 }
327 dbg("%s - Exit: rc[%d]\n", __FUNCTION__, retval); 330 dbg("%s - Exit: rc[%d]\n", __FUNCTION__, retval);
331
332 /* XXX FIXME: reports a failure only if last entry in loop failed */
328 return retval; 333 return retval;
329} 334}
330 335
diff --git a/drivers/pci/hotplug/rpaphp_pci.c b/drivers/pci/hotplug/rpaphp_pci.c
index 6f6cbede5135..a669ba3f29c9 100644
--- a/drivers/pci/hotplug/rpaphp_pci.c
+++ b/drivers/pci/hotplug/rpaphp_pci.c
@@ -195,7 +195,6 @@ static int setup_pci_slot(struct slot *slot)
195 } 195 }
196 return 0; 196 return 0;
197exit_rc: 197exit_rc:
198 dealloc_slot_struct(slot);
199 return -EINVAL; 198 return -EINVAL;
200} 199}
201 200
diff --git a/drivers/pci/hotplug/rpaphp_slot.c b/drivers/pci/hotplug/rpaphp_slot.c
index 907f1301f84a..dd1e275a82ce 100644
--- a/drivers/pci/hotplug/rpaphp_slot.c
+++ b/drivers/pci/hotplug/rpaphp_slot.c
@@ -184,7 +184,6 @@ int rpaphp_register_slot(struct slot *slot)
184sysfs_fail: 184sysfs_fail:
185 pci_hp_deregister(php_slot); 185 pci_hp_deregister(php_slot);
186register_fail: 186register_fail:
187 rpaphp_release_slot(php_slot);
188 return retval; 187 return retval;
189} 188}
190 189