• Julian Wiedmann's avatar
    s390/qeth: fix af_iucv notification race · 8908f36d
    Julian Wiedmann authored
    The two expected notification sequences are
    1. TX_NOTIFY_PENDING with a subsequent TX_NOTIFY_DELAYED_*, when
       our TX completion code first observed the pending TX and the QAOB
       then completes at a later time; or
    2. TX_NOTIFY_OK, when qeth_qdio_handle_aob() picked up the QAOB
       completion before our TX completion code even noticed that the TX
       was pending.
    
    But as qeth_iqd_tx_complete() and qeth_qdio_handle_aob() can run
    concurrently, we may end up with a race that results in a sequence of
    TX_NOTIFY_DELAYED_* followed by TX_NOTIFY_PENDING. Which would confuse
    the af_iucv code in its tracking of pending transmits.
    
    Rework the notification code, so that qeth_qdio_handle_aob() defers its
    notification if the TX completion code is still active.
    
    Fixes: b3332930 ("qeth: add support for af_iucv HiperSockets transport")
    Signed-off-by: default avatarJulian Wiedmann <jwi@linux.ibm.com>
    Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    8908f36d
qeth_core_main.c 186 KB