From: Alan Cox Not sure how this one got missed in the great purge some time ago but it did. Signed-off-by: Alan Cox Cc: Sergei Shtylyov Signed-off-by: Andrew Morton --- drivers/ide/pci/sl82c105.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff -puN drivers/ide/pci/sl82c105.c~sl82c105-switch-to-ref-counting-api drivers/ide/pci/sl82c105.c --- a/drivers/ide/pci/sl82c105.c~sl82c105-switch-to-ref-counting-api +++ a/drivers/ide/pci/sl82c105.c @@ -343,7 +343,7 @@ static unsigned int sl82c105_bridge_revi /* * The bridge should be part of the same device, but function 0. */ - bridge = pci_find_slot(dev->bus->number, + bridge = pci_get_bus_and_slot(dev->bus->number, PCI_DEVFN(PCI_SLOT(dev->devfn), 0)); if (!bridge) return -1; @@ -353,13 +353,15 @@ static unsigned int sl82c105_bridge_revi */ if (bridge->vendor != PCI_VENDOR_ID_WINBOND || bridge->device != PCI_DEVICE_ID_WINBOND_83C553 || - bridge->class >> 8 != PCI_CLASS_BRIDGE_ISA) + bridge->class >> 8 != PCI_CLASS_BRIDGE_ISA) { + pci_dev_put(bridge); return -1; - + } /* * We need to find function 0's revision, not function 1 */ pci_read_config_byte(bridge, PCI_REVISION_ID, &rev); + pci_dev_put(bridge); return rev; } _