소스 검색

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>
Linas Vepstas 19 년 전
부모
커밋
31be7586d1
3개의 변경된 파일5개의 추가작업 그리고 2개의 파일을 삭제
  1. 5 0
      drivers/pci/hotplug/rpaphp_core.c
  2. 0 1
      drivers/pci/hotplug/rpaphp_pci.c
  3. 0 1
      drivers/pci/hotplug/rpaphp_slot.c

+ 5 - 0
drivers/pci/hotplug/rpaphp_core.c

@@ -321,10 +321,15 @@ int rpaphp_add_slot(struct device_node *dn)
 				indexes[i + 1], name, type);
 
 		retval = rpaphp_register_pci_slot(slot);
+		if (retval)
+			dealloc_slot_struct(slot);
+
 		name += strlen(name) + 1;
 		type += strlen(type) + 1;
 	}
 	dbg("%s - Exit: rc[%d]\n", __FUNCTION__, retval);
+
+	/* XXX FIXME: reports a failure only if last entry in loop failed */
 	return retval;
 }
 

+ 0 - 1
drivers/pci/hotplug/rpaphp_pci.c

@@ -195,7 +195,6 @@ static int setup_pci_slot(struct slot *slot)
 	}
 	return 0;
 exit_rc:
-	dealloc_slot_struct(slot);
 	return -EINVAL;
 }
 

+ 0 - 1
drivers/pci/hotplug/rpaphp_slot.c

@@ -184,7 +184,6 @@ int rpaphp_register_slot(struct slot *slot)
 sysfs_fail:
 	pci_hp_deregister(php_slot);
 register_fail:
-	rpaphp_release_slot(php_slot);
 	return retval;
 }