}
        pcifront_init_sd(sd, domain, bus, pdev);
 
+       pci_lock_rescan_remove();
+
        b = pci_scan_bus_parented(&pdev->xdev->dev, bus,
                                  &pcifront_bus_ops, sd);
        if (!b) {
                dev_err(&pdev->xdev->dev,
                        "Error creating PCI Frontend Bus!\n");
                err = -ENOMEM;
+               pci_unlock_rescan_remove();
                goto err_out;
        }
 
        /* Create SysFS and notify udev of the devices. Aka: "going live" */
        pci_bus_add_devices(b);
 
+       pci_unlock_rescan_remove();
        return err;
 
 err_out:
 
        dev_dbg(&pdev->xdev->dev, "cleaning up root buses\n");
 
+       pci_lock_rescan_remove();
        list_for_each_entry_safe(bus_entry, t, &pdev->root_buses, list) {
                list_del(&bus_entry->list);
 
 
                kfree(bus_entry);
        }
+       pci_unlock_rescan_remove();
 }
 
 static pci_ers_result_t pcifront_common_process(int cmd,
                                domain, bus, slot, func);
                        continue;
                }
+               pci_lock_rescan_remove();
                pci_stop_and_remove_bus_device(pci_dev);
                pci_dev_put(pci_dev);
+               pci_unlock_rescan_remove();
 
                dev_dbg(&pdev->xdev->dev,
                        "PCI device %04x:%02x:%02x.%d removed.\n",