DF-4969 / fix.diff
--- a/sys/dev/disk/advansys/adw_pci.c +++ b/sys/dev/disk/advansys/adw_pci.c @@ -234,6 +234,7 @@ */ if (adw_find_signature(adw) == 0) { adw_free(adw); + bus_release_resource(dev, regs_type, regs_id, regs); return (ENXIO); } @@ -241,8 +242,11 @@ error = entry->setup(dev, entry, adw); - if (error != 0) + if (error != 0) { + adw_free(adw); + bus_release_resource(dev, regs_type, regs_id, regs); return (error); + } /* Ensure busmastering is enabled */ command |= PCIM_CMD_BUSMASTEREN; @@ -266,6 +270,7 @@ kprintf("%s: Could not allocate DMA tag - error %d\n", adw_name(adw), error); adw_free(adw); + bus_release_resource(dev, regs_type, regs_id, regs); return (error); } @@ -274,6 +279,7 @@ error = adw_init(adw); if (error != 0) { adw_free(adw); + bus_release_resource(dev, regs_type, regs_id, regs); return (error); } @@ -294,12 +300,16 @@ 0, ~0, 1, RF_ACTIVE | RF_SHAREABLE); if (adw->irq == NULL) { adw_free(adw); + bus_release_resource(dev, regs_type, regs_id, regs); return (ENOMEM); } error = adw_attach(adw); - if (error != 0) + if (error != 0) { + bus_release_resource(dev, adw->irq_res_type, 0, adw->irq); adw_free(adw); + bus_release_resource(dev, regs_type, regs_id, regs); + } return (error); } |