Patch "ibmvnic: Properly dispose of all skbs during a failover." has been added to the 5.18-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

    ibmvnic: Properly dispose of all skbs during a failover.

to the 5.18-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:
     ibmvnic-properly-dispose-of-all-skbs-during-a-failov.patch
and it can be found in the queue-5.18 subdirectory.

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



commit 65c56af6bcc95373b50345db2601be158054e6ef
Author: Rick Lindsley <ricklind@xxxxxxxxxx>
Date:   Sat Jul 2 03:37:12 2022 -0700

    ibmvnic: Properly dispose of all skbs during a failover.
    
    [ Upstream commit 1b18f09d31cfa7148df15a7d5c5e0e86f105f7d1 ]
    
    During a reset, there may have been transmits in flight that are no
    longer valid and cannot be fulfilled.  Resetting and clearing the
    queues is insufficient; each skb also needs to be explicitly freed
    so that upper levels are not left waiting for confirmation of a
    transmit that will never happen.  If this happens frequently enough,
    the apparent backlog will cause TCP to begin "congestion control"
    unnecessarily, culminating in permanently decreased throughput.
    
    Fixes: d7c0ef36bde03 ("ibmvnic: Free and re-allocate scrqs when tx/rx scrqs change")
    Tested-by: Nick Child <nnac123@xxxxxxxxxxxxx>
    Reviewed-by: Brian King <brking@xxxxxxxxxxxxxxxxxx>
    Signed-off-by: Rick Lindsley <ricklind@xxxxxxxxxx>
    Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
index 5c5931dba51d..c4221f89ab18 100644
--- a/drivers/net/ethernet/ibm/ibmvnic.c
+++ b/drivers/net/ethernet/ibm/ibmvnic.c
@@ -5774,6 +5774,15 @@ static int ibmvnic_reset_init(struct ibmvnic_adapter *adapter, bool reset)
 			release_sub_crqs(adapter, 0);
 			rc = init_sub_crqs(adapter);
 		} else {
+			/* no need to reinitialize completely, but we do
+			 * need to clean up transmits that were in flight
+			 * when we processed the reset.  Failure to do so
+			 * will confound the upper layer, usually TCP, by
+			 * creating the illusion of transmits that are
+			 * awaiting completion.
+			 */
+			clean_tx_pools(adapter);
+
 			rc = reset_sub_crq_queues(adapter);
 		}
 	} else {



[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