On 05/14/2013 01:23 AM, Yinghai Lu wrote: > On Mon, May 13, 2013 at 9:08 AM, Jiang Liu wrote: >> From: Gu Zheng >> diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c >> index 4f0bc0a..bc075a3 100644 >> --- a/drivers/pci/probe.c >> +++ b/drivers/pci/probe.c >> @@ -1131,6 +1131,7 @@ static void pci_release_dev(struct device *dev) >> struct pci_dev *pci_dev; >> >> pci_dev = to_pci_dev(dev); >> + pci_bus_put(pci_dev->bus); >> pci_release_capabilities(pci_dev); >> pci_release_of_node(pci_dev); >> kfree(pci_dev); >> @@ -1269,11 +1270,10 @@ static struct pci_dev *pci_scan_device(struct pci_bus *bus, int devfn) >> if (!pci_bus_read_dev_vendor_id(bus, devfn, &l, 60*1000)) >> return NULL; >> >> - dev = alloc_pci_dev(); >> + dev = pci_alloc_dev(bus); >> if (!dev) >> return NULL; >> >> - dev->bus = bus; >> dev->devfn = devfn; >> dev->vendor = l & 0xffff; >> dev->device = (l >> 16) & 0xffff; > > in pci_setup_device() fail path, it release the ref to that bus. Yes, you're right, we need to release the bus' ref if pci_setup_device() failed. Thanks for your correction.:) Best regards, Gu > > Yinghai >