Patch "s390/qeth: fix notification for pending buffers during teardown" has been added to the 5.10-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    s390/qeth: fix notification for pending buffers during teardown

to the 5.10-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     s390-qeth-fix-notification-for-pending-buffers-durin.patch
and it can be found in the queue-5.10 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit b693b65fee8137c86b32714fc19e6e28c1831c2f
Author: Julian Wiedmann <jwi@xxxxxxxxxxxxx>
Date:   Tue Mar 9 17:52:21 2021 +0100

    s390/qeth: fix notification for pending buffers during teardown
    
    [ Upstream commit 7eefda7f353ef86ad82a2dc8329e8a3538c08ab6 ]
    
    The cited commit reworked the state machine for pending TX buffers.
    In qeth_iqd_tx_complete() it turned PENDING into a transient state, and
    uses NEED_QAOB for buffers that get parked while waiting for their QAOB
    completion.
    
    But it missed to adjust the check in qeth_tx_complete_buf(). So if
    qeth_tx_complete_pending_bufs() is called during teardown to drain
    the parked TX buffers, we no longer raise a notification for af_iucv.
    
    Instead of updating the checked state, just move this code into
    qeth_tx_complete_pending_bufs() itself. This also gets rid of the
    special-case in the common TX completion path.
    
    Fixes: 8908f36d20d8 ("s390/qeth: fix af_iucv notification race")
    Signed-off-by: Julian Wiedmann <jwi@xxxxxxxxxxxxx>
    Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/s390/net/qeth_core_main.c b/drivers/s390/net/qeth_core_main.c
index db785030293b..03f96177e58e 100644
--- a/drivers/s390/net/qeth_core_main.c
+++ b/drivers/s390/net/qeth_core_main.c
@@ -1383,9 +1383,6 @@ static void qeth_tx_complete_buf(struct qeth_qdio_out_buffer *buf, bool error,
 	struct qeth_qdio_out_q *queue = buf->q;
 	struct sk_buff *skb;
 
-	if (atomic_read(&buf->state) == QETH_QDIO_BUF_PENDING)
-		qeth_notify_skbs(queue, buf, TX_NOTIFY_GENERALERROR);
-
 	/* Empty buffer? */
 	if (buf->next_element_to_fill == 0)
 		return;
@@ -1458,6 +1455,9 @@ static void qeth_tx_complete_pending_bufs(struct qeth_card *card,
 			QETH_CARD_TEXT(card, 5, "fp");
 			QETH_CARD_TEXT_(card, 5, "%lx", (long) buf);
 
+			if (drain)
+				qeth_notify_skbs(queue, buf,
+						 TX_NOTIFY_GENERALERROR);
 			qeth_tx_complete_buf(buf, drain, 0);
 
 			list_del(&buf->list_entry);



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux