diff --git a/sys/dev/disk/advansys/adv_pci.c b/sys/dev/disk/advansys/adv_pci.c --- a/sys/dev/disk/advansys/adv_pci.c +++ b/sys/dev/disk/advansys/adv_pci.c @@ -293,8 +293,15 @@ return ENXIO; } - adv_attach(adv); - return 0; + error = adv_attach(adv); + if (error != 0) { + bus_teardown_intr(dev, irqres, ih); + bus_release_resource(dev, SYS_RES_IRQ, irqrid, irqres); + bus_release_resource(dev, SYS_RES_IOPORT, rid, iores); + adv_free(adv); + return (error); + } + return (0); } static device_method_t adv_pci_methods[] = {