ips_init_phase1 and ips_init_phase2 call ips_abort_init on failure, but it doesn't free 'ha'. 'ha' should be released on ips_release. Needs review from someone who knows stuff a bit more. Signed-off-by: Domen Puncer --- c/drivers/scsi/ips.c 2004-06-16 07:18:38.000000000 +0200 +++ a/drivers/scsi/ips.c 2004-06-26 15:36:14.000000000 +0200 @@ -729,6 +729,7 @@ ips_release(struct Scsi_Host *sh) /* free IRQ */ free_irq(ha->irq, ha); + kfree(ha); IPS_REMOVE_HOST(sh); scsi_host_put(sh); @@ -6946,6 +6947,7 @@ ips_abort_init(ips_ha_t * ha, int index) { ha->active = 0; ips_free(ha); + kfree(ha); ips_ha[index] = 0; ips_sh[index] = 0; return -1;