s390/qdio: don't release memory in qdio_setup_irq()

Calling qdio_release_memory() on error is just plain wrong. It frees
the main qdio_irq struct, when following code still uses it.

Also, no other error path in qdio_establish() does this. So trust
callers to clean up via qdio_free() if some step of the QDIO
initialization fails.

Fixes: 779e6e1c724d ("[S390] qdio: new qdio driver.")
Cc: <stable@vger.kernel.org> #v2.6.27+
Signed-off-by: Julian Wiedmann <jwi@linux.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>

authored by Julian Wiedmann and committed by Martin Schwidefsky 2e68adcd e5218134

+2 -8
+2 -8
drivers/s390/cio/qdio_setup.c
··· 456 { 457 struct ciw *ciw; 458 struct qdio_irq *irq_ptr = init_data->cdev->private->qdio_data; 459 - int rc; 460 461 memset(&irq_ptr->qib, 0, sizeof(irq_ptr->qib)); 462 memset(&irq_ptr->siga_flag, 0, sizeof(irq_ptr->siga_flag)); ··· 492 ciw = ccw_device_get_ciw(init_data->cdev, CIW_TYPE_EQUEUE); 493 if (!ciw) { 494 DBF_ERROR("%4x NO EQ", irq_ptr->schid.sch_no); 495 - rc = -EINVAL; 496 - goto out_err; 497 } 498 irq_ptr->equeue = *ciw; 499 500 ciw = ccw_device_get_ciw(init_data->cdev, CIW_TYPE_AQUEUE); 501 if (!ciw) { 502 DBF_ERROR("%4x NO AQ", irq_ptr->schid.sch_no); 503 - rc = -EINVAL; 504 - goto out_err; 505 } 506 irq_ptr->aqueue = *ciw; 507 ··· 509 init_data->cdev->handler = qdio_int_handler; 510 spin_unlock_irq(get_ccwdev_lock(irq_ptr->cdev)); 511 return 0; 512 - out_err: 513 - qdio_release_memory(irq_ptr); 514 - return rc; 515 } 516 517 void qdio_print_subchannel_info(struct qdio_irq *irq_ptr,
··· 456 { 457 struct ciw *ciw; 458 struct qdio_irq *irq_ptr = init_data->cdev->private->qdio_data; 459 460 memset(&irq_ptr->qib, 0, sizeof(irq_ptr->qib)); 461 memset(&irq_ptr->siga_flag, 0, sizeof(irq_ptr->siga_flag)); ··· 493 ciw = ccw_device_get_ciw(init_data->cdev, CIW_TYPE_EQUEUE); 494 if (!ciw) { 495 DBF_ERROR("%4x NO EQ", irq_ptr->schid.sch_no); 496 + return -EINVAL; 497 } 498 irq_ptr->equeue = *ciw; 499 500 ciw = ccw_device_get_ciw(init_data->cdev, CIW_TYPE_AQUEUE); 501 if (!ciw) { 502 DBF_ERROR("%4x NO AQ", irq_ptr->schid.sch_no); 503 + return -EINVAL; 504 } 505 irq_ptr->aqueue = *ciw; 506 ··· 512 init_data->cdev->handler = qdio_int_handler; 513 spin_unlock_irq(get_ccwdev_lock(irq_ptr->cdev)); 514 return 0; 515 } 516 517 void qdio_print_subchannel_info(struct qdio_irq *irq_ptr,