continue;
 
        instance = scsi_register (tpnt, sizeof (struct WD33C93_hostdata));
-       if (instance == NULL) {
-           release_mem_region(address, 256);
-           continue;
-       }
+       if (instance == NULL)
+           goto release;
        instance->base = ZTWO_VADDR(address);
        instance->irq = IRQ_AMIGA_PORTS;
        instance->unique_id = z->slotaddr;
        HDATA(instance)->fast = 0;
        HDATA(instance)->dma_mode = CTRL_DMA;
        wd33c93_init(instance, regs, dma_setup, dma_stop, WD33C93_FS_8_10);
-       request_irq(IRQ_AMIGA_PORTS, a2091_intr, IRQF_SHARED, "A2091 SCSI",
-                   instance);
+       if (request_irq(IRQ_AMIGA_PORTS, a2091_intr, IRQF_SHARED, "A2091 SCSI",
+                       instance))
+           goto unregister;
        DMA(instance)->CNTR = CNTR_PDMD | CNTR_INTEN;
        num_a2091++;
+       continue;
+
+unregister:
+       scsi_unregister(instance);
+       wd33c93_release();
+release:
+       release_mem_region(address, 256);
     }
 
     return num_a2091;
 
                     (epc & GVP_SCSICLKMASK) ? WD33C93_FS_8_10
                                             : WD33C93_FS_12_15);
 
-       request_irq(IRQ_AMIGA_PORTS, gvp11_intr, IRQF_SHARED, "GVP11 SCSI",
-                   instance);
+       if (request_irq(IRQ_AMIGA_PORTS, gvp11_intr, IRQF_SHARED, "GVP11 SCSI",
+                       instance))
+               goto unregister;
        DMA(instance)->CNTR = GVP11_DMAC_INT_ENABLE;
        num_gvp11++;
        continue;
 
+unregister:
+       scsi_unregister(instance);
+       wd33c93_release();
 release:
        release_mem_region(address, 256);
     }