lkml.org 
[lkml]   [2018]   [Sep]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 4.4 27/30] s390/qeth: fix race in used-buffer accounting
    Date
    From: Julian Wiedmann <jwi@linux.ibm.com>

    [ Upstream commit a702349a4099cd5a7bab0904689d8e0bf8dcd622 ]

    By updating q->used_buffers only _after_ do_QDIO() has completed, there
    is a potential race against the buffer's TX completion. In the unlikely
    case that the TX completion path wins, qeth_qdio_output_handler() would
    decrement the counter before qeth_flush_buffers() even incremented it.

    Signed-off-by: Julian Wiedmann <jwi@linux.ibm.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    ---
    drivers/s390/net/qeth_core_main.c | 3 ++-
    1 file changed, 2 insertions(+), 1 deletion(-)

    diff --git a/drivers/s390/net/qeth_core_main.c b/drivers/s390/net/qeth_core_main.c
    index 95c631125a20..09ac56317f1b 100644
    --- a/drivers/s390/net/qeth_core_main.c
    +++ b/drivers/s390/net/qeth_core_main.c
    @@ -3505,13 +3505,14 @@ static void qeth_flush_buffers(struct qeth_qdio_out_q *queue, int index,
    qdio_flags = QDIO_FLAG_SYNC_OUTPUT;
    if (atomic_read(&queue->set_pci_flags_count))
    qdio_flags |= QDIO_FLAG_PCI_OUT;
    + atomic_add(count, &queue->used_buffers);
    +
    rc = do_QDIO(CARD_DDEV(queue->card), qdio_flags,
    queue->queue_no, index, count);
    if (queue->card->options.performance_stats)
    queue->card->perf_stats.outbound_do_qdio_time +=
    qeth_get_micros() -
    queue->card->perf_stats.outbound_do_qdio_start_time;
    - atomic_add(count, &queue->used_buffers);
    if (rc) {
    queue->card->stats.tx_errors += count;
    /* ignore temporary SIGA errors without busy condition */
    --
    2.17.1
    \
     
     \ /
      Last update: 2018-09-07 02:44    [W:4.455 / U:0.036 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site