if (pci_request_selected_regions(pdev, ioc->bars, "mpt")) {
                printk(MYIOC_s_ERR_FMT "pci_request_selected_regions() with "
                    "MEM failed\n", ioc->name);
-               return r;
+               goto out_pci_disable_device;
        }
 
        if (sizeof(dma_addr_t) > 4) {
                } else {
                        printk(MYIOC_s_WARN_FMT "no suitable DMA mask for %s\n",
                            ioc->name, pci_name(pdev));
-                       pci_release_selected_regions(pdev, ioc->bars);
-                       return r;
+                       goto out_pci_release_region;
                }
        } else {
                if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32))
                } else {
                        printk(MYIOC_s_WARN_FMT "no suitable DMA mask for %s\n",
                            ioc->name, pci_name(pdev));
-                       pci_release_selected_regions(pdev, ioc->bars);
-                       return r;
+                       goto out_pci_release_region;
                }
        }
 
        if (mem == NULL) {
                printk(MYIOC_s_ERR_FMT ": ERROR - Unable to map adapter"
                        " memory!\n", ioc->name);
-               pci_release_selected_regions(pdev, ioc->bars);
-               return -EINVAL;
+               r = -EINVAL;
+               goto out_pci_release_region;
        }
        ioc->memmap = mem;
        dinitprintk(ioc, printk(MYIOC_s_INFO_FMT "mem = %p, mem_phys = %llx\n",
        ioc->pio_chip = (SYSIF_REGS __iomem *)port;
 
        return 0;
+
+out_pci_release_region:
+       pci_release_selected_regions(pdev, ioc->bars);
+out_pci_disable_device:
+       pci_disable_device(pdev);
+       return r;
 }
 
 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/