s390/pci: free resources after failed bus allocation
authorSebastian Ott <sebott@linux.vnet.ibm.com>
Tue, 28 Jul 2015 17:10:45 +0000 (19:10 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Wed, 29 Jul 2015 07:11:49 +0000 (09:11 +0200)
Free bus resources when the allocation/registration of the bus failed.

Reviewed-by: Gerald Schaefer <gerald.schaefer@de.ibm.com>
Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/pci/pci.c

index 6316f49..17c04c7 100644 (file)
@@ -632,7 +632,7 @@ static void zpci_cleanup_bus_resources(struct zpci_dev *zdev)
        int i;
 
        for (i = 0; i < PCI_BAR_COUNT; i++) {
-               if (!zdev->bars[i].size)
+               if (!zdev->bars[i].size || !zdev->bars[i].res)
                        continue;
 
                zpci_free_iomap(zdev, zdev->bars[i].map_idx);
@@ -772,17 +772,22 @@ static int zpci_scan_bus(struct zpci_dev *zdev)
 
        ret = zpci_setup_bus_resources(zdev, &resources);
        if (ret)
-               return ret;
+               goto error;
 
        zdev->bus = pci_scan_root_bus(NULL, ZPCI_BUS_NR, &pci_root_ops,
                                      zdev, &resources);
        if (!zdev->bus) {
-               zpci_cleanup_bus_resources(zdev);
-               return -EIO;
+               ret = -EIO;
+               goto error;
        }
        zdev->bus->max_bus_speed = zdev->max_bus_speed;
        pci_bus_add_devices(zdev->bus);
        return 0;
+
+error:
+       zpci_cleanup_bus_resources(zdev);
+       pci_free_resource_list(&resources);
+       return ret;
 }
 
 int zpci_enable_device(struct zpci_dev *zdev)