diff --git a/drivers/scsi/fdomain.c b/drivers/scsi/fdomain.c --- a/drivers/scsi/fdomain.c +++ b/drivers/scsi/fdomain.c @@ -801,7 +801,7 @@ static int fdomain_pci_bios_detect( int { unsigned int pci_irq; /* PCI interrupt line */ unsigned long pci_base; /* PCI I/O base address */ - struct pci_dev *pdev = NULL; + struct pci_dev *pdev; #if DEBUG_DETECT /* Tell how to print a list of the known PCI devices from bios32 and @@ -814,9 +814,13 @@ static int fdomain_pci_bios_detect( int PCI_DEVICE_ID_FD_36C70 ); #endif - if ((pdev = pci_find_device(PCI_VENDOR_ID_FD, PCI_DEVICE_ID_FD_36C70, pdev)) == NULL) + if ((pdev = pci_get_device(PCI_VENDOR_ID_FD, PCI_DEVICE_ID_FD_36C70, + NULL)) == NULL) return 0; - if (pci_enable_device(pdev)) return 0; + if (pci_enable_device(pdev)) { + pci_dev_put(pdev); + return 0; + } #if DEBUG_DETECT printk( "scsi: TMC-3260 detect:" @@ -832,8 +836,10 @@ static int fdomain_pci_bios_detect( int pci_base = pci_resource_start(pdev, 0); pci_irq = pdev->irq; - if (!request_region( pci_base, 0x10, "fdomain" )) - return 0; + if (!request_region( pci_base, 0x10, "fdomain" )) { + pci_dev_put(pdev); + return 0; + } /* Now we have the I/O base address and interrupt from the PCI configuration registers. */ @@ -847,11 +853,13 @@ static int fdomain_pci_bios_detect( int " IRQ = %d, I/O base = 0x%x [0x%lx]\n", *irq, *iobase, pci_base ); #endif - if (!fdomain_is_valid_port(pci_base)) { - printk(KERN_ERR "scsi: PCI card detected, but driver not loaded (invalid port)\n" ); - release_region(pci_base, 0x10); - return 0; - } + if (!fdomain_is_valid_port(pci_base)) { + printk(KERN_ERR "scsi: PCI card detected, but driver not " + "loaded (invalid port)\n" ); + release_region(pci_base, 0x10); + pci_dev_put(pdev); + return 0; + } /* Fill in a few global variables. Ugh. */ bios_major = bios_minor = -1; @@ -951,7 +959,7 @@ struct Scsi_Host *__fdomain_16x0_detect( retcode = request_irq( interrupt_level, do_fdomain_16x0_intr, pdev?SA_SHIRQ:0, "fdomain", shpnt); - + pci_dev_put(pdev); if (retcode < 0) { if (retcode == -EINVAL) { printk(KERN_ERR "scsi: IRQ %d is bad!\n", interrupt_level );