aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/cio/qdio_main.c
diff options
context:
space:
mode:
authorJan Glauber <jang@linux.vnet.ibm.com>2009-03-26 10:24:27 -0400
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2009-03-26 10:24:20 -0400
commit700e982f28f5e13cef8eea93ac8c6702f699d894 (patch)
treec91163f8972c0e1226d6db3c90ea31578f229c2b /drivers/s390/cio/qdio_main.c
parentc38f96080955854e54df9cb392bc674e1ae330e1 (diff)
[S390] qdio: call qdio_free also if qdio_shutdown fails
qdio_cleanup is a wrapper function that should call qdio_shutdown and qdio_free. qdio_free was not called if an error occured in qdio_shutdown resulting in a missing free of allocated resources. Call qdio_free regardless of the return value of qdio_shutdown. Signed-off-by: Jan Glauber <jang@linux.vnet.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'drivers/s390/cio/qdio_main.c')
-rw-r--r--drivers/s390/cio/qdio_main.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/s390/cio/qdio_main.c b/drivers/s390/cio/qdio_main.c
index 1974ec7bf0ed..8e6bc9cddfa0 100644
--- a/drivers/s390/cio/qdio_main.c
+++ b/drivers/s390/cio/qdio_main.c
@@ -1073,8 +1073,9 @@ EXPORT_SYMBOL_GPL(qdio_get_ssqd_desc);
1073 * @cdev: associated ccw device 1073 * @cdev: associated ccw device
1074 * @how: use halt or clear to shutdown 1074 * @how: use halt or clear to shutdown
1075 * 1075 *
1076 * This function calls qdio_shutdown() for @cdev with method @how 1076 * This function calls qdio_shutdown() for @cdev with method @how.
1077 * and on success qdio_free() for @cdev. 1077 * and qdio_free(). The qdio_free() return value is ignored since
1078 * !irq_ptr is already checked.
1078 */ 1079 */
1079int qdio_cleanup(struct ccw_device *cdev, int how) 1080int qdio_cleanup(struct ccw_device *cdev, int how)
1080{ 1081{
@@ -1085,8 +1086,8 @@ int qdio_cleanup(struct ccw_device *cdev, int how)
1085 return -ENODEV; 1086 return -ENODEV;
1086 1087
1087 rc = qdio_shutdown(cdev, how); 1088 rc = qdio_shutdown(cdev, how);
1088 if (rc == 0) 1089
1089 rc = qdio_free(cdev); 1090 qdio_free(cdev);
1090 return rc; 1091 return rc;
1091} 1092}
1092EXPORT_SYMBOL_GPL(qdio_cleanup); 1093EXPORT_SYMBOL_GPL(qdio_cleanup);