linux/drivers/s390/net
Julian Wiedmann f9e50b02a9 s390/qeth: fix dangling IO buffers after halt/clear
The cio layer's intparm logic does not align itself well with how qeth
manages cmd IOs. When an active IO gets terminated via halt/clear, the
corresponding IRQ's intparm does not reflect the cmd buffer but rather
the intparm that was passed to ccw_device_halt() / ccw_device_clear().
This behaviour was recently clarified in
commit b91d9e67e5 ("s390/cio: fix intparm documentation").

As a result, qeth_irq() currently doesn't cancel a cmd that was
terminated via halt/clear. This primarily causes us to leak
card->read_cmd after the qeth device is removed, since our IO path still
holds a refcount for this cmd.

For qeth this means that we need to keep track of which IO is pending on
a device ('active_cmd'), and use this as the intparm when calling
halt/clear. Otherwise qeth_irq() can't match the subsequent IRQ to its
cmd buffer.
Since we now keep track of the _expected_ intparm, we can also detect
any mismatch; this would constitute a bug somewhere in the lower layers.
In this case cancel the active cmd - we effectively "lost" the IRQ and
should not expect any further notification for this IO.

Fixes: 405548959c ("s390/qeth: add support for dynamically allocated cmds")
Signed-off-by: Julian Wiedmann <jwi@linux.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2019-12-05 12:25:05 -08:00
..
ctcm_dbug.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
ctcm_dbug.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
ctcm_fsms.c s390/ctcm: don't use intparm for channel IO 2019-08-20 13:51:46 -07:00
ctcm_fsms.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
ctcm_main.c s390/ctcm: Delete unnecessary checks before the macro call “dev_kfree_skb” 2019-09-16 21:45:32 +02:00
ctcm_main.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
ctcm_mpc.c s390/ctcm: don't use intparm for channel IO 2019-08-20 13:51:46 -07:00
ctcm_mpc.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
ctcm_sysfs.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
fsm.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux 2017-11-30 08:13:36 -08:00
fsm.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
ism.h net/smc: immediate termination for SMCD link groups 2019-11-15 12:28:28 -08:00
ism_drv.c s390/ism: move oddities of device IO to wrapper function 2019-04-29 10:47:01 +02:00
Kconfig s390/Kconfig: pedantic cleanups 2019-06-04 15:03:46 +02:00
lcs.c s390/lcs: don't use intparm for channel IO 2019-08-20 13:51:46 -07:00
lcs.h net: convert lcs_reply.refcnt from atomic_t to refcount_t 2017-12-20 15:23:44 -05:00
Makefile s390/qeth: move ethtool code into its own file 2019-02-15 20:35:29 -08:00
netiucv.c s390: drivers: Remove redundant license text 2017-11-24 14:28:47 +01:00
qeth_core.h s390/qeth: fix dangling IO buffers after halt/clear 2019-12-05 12:25:05 -08:00
qeth_core_main.c s390/qeth: fix dangling IO buffers after halt/clear 2019-12-05 12:25:05 -08:00
qeth_core_mpc.c s390/qeth: allow cmd callbacks to return errnos 2019-02-12 13:14:24 -05:00
qeth_core_mpc.h s390/qeth: fix dangling IO buffers after halt/clear 2019-12-05 12:25:05 -08:00
qeth_core_sys.c s390/qeth: don't check drvdata in sysfs code 2019-11-14 18:16:51 -08:00
qeth_ethtool.c s390/qeth: guard against runt packets 2019-12-05 12:25:05 -08:00
qeth_l2.h s390/qeth: clean up exported symbols 2018-07-12 16:42:39 -07:00
qeth_l2_main.c s390/qeth: fix dangling IO buffers after halt/clear 2019-12-05 12:25:05 -08:00
qeth_l2_sys.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2019-11-22 16:27:24 -08:00
qeth_l3.h Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next 2019-11-25 20:02:57 -08:00
qeth_l3_main.c s390/qeth: fix dangling IO buffers after halt/clear 2019-12-05 12:25:05 -08:00
qeth_l3_sys.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next 2019-11-25 20:02:57 -08:00
smsgiucv.c s390/smsgiucv: disable SMSG on module unload 2018-04-16 09:10:17 +02:00
smsgiucv.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
smsgiucv_app.c s390: net: add SPDX identifiers to the remaining files 2017-11-24 14:28:43 +01:00