--- /dev/null
+From: Gerald Schaefer <geraldsc@de.ibm.com>
+Subject: qdio: call qdio_free also if qdio_shutdown fails
+References: bnc#484767,LTC#52207
+
+Symptom: Warning message after qeth recovery.
+Problem: 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.
+Solution: Always call qdio_free in qdio_cleanup.
+
+Acked-by: John Jolly <jjolly@suse.de>
+---
+ drivers/s390/cio/qdio_main.c | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+Index: linux-sles11/drivers/s390/cio/qdio_main.c
+===================================================================
+--- linux-sles11.orig/drivers/s390/cio/qdio_main.c
++++ linux-sles11/drivers/s390/cio/qdio_main.c
+@@ -1055,8 +1055,9 @@ EXPORT_SYMBOL_GPL(qdio_get_ssqd_desc);
+ * @cdev: associated ccw device
+ * @how: use halt or clear to shutdown
+ *
+- * This function calls qdio_shutdown() for @cdev with method @how
+- * and on success qdio_free() for @cdev.
++ * This function calls qdio_shutdown() for @cdev with method @how.
++ * and qdio_free(). The qdio_free() return value is ignored since
++ * !irq_ptr is already checked.
+ */
+ int qdio_cleanup(struct ccw_device *cdev, int how)
+ {
+@@ -1067,8 +1068,8 @@ int qdio_cleanup(struct ccw_device *cdev
+ return -ENODEV;
+
+ rc = qdio_shutdown(cdev, how);
+- if (rc == 0)
+- rc = qdio_free(cdev);
++
++ qdio_free(cdev);
+ return rc;
+ }
+ EXPORT_SYMBOL_GPL(qdio_cleanup);