diff options
author | Jan Glauber <jang@linux.vnet.ibm.com> | 2009-03-26 10:24:27 -0400 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2009-03-26 10:24:20 -0400 |
commit | 700e982f28f5e13cef8eea93ac8c6702f699d894 (patch) | |
tree | c91163f8972c0e1226d6db3c90ea31578f229c2b /drivers/s390/cio | |
parent | c38f96080955854e54df9cb392bc674e1ae330e1 (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')
-rw-r--r-- | drivers/s390/cio/qdio_main.c | 9 |
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 | */ |
1079 | int qdio_cleanup(struct ccw_device *cdev, int how) | 1080 | int 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 | } |
1092 | EXPORT_SYMBOL_GPL(qdio_cleanup); | 1093 | EXPORT_SYMBOL_GPL(qdio_cleanup); |