lkml.org 
[lkml]   [2022]   [Jul]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 209/230] ibmvnic: Properly dispose of all skbs during a failover.
    Date
    From: Rick Lindsley <ricklind@us.ibm.com>

    [ 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@linux.ibm.com>
    Reviewed-by: Brian King <brking@linux.vnet.ibm.com>
    Signed-off-by: Rick Lindsley <ricklind@us.ibm.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/ethernet/ibm/ibmvnic.c | 9 +++++++++
    1 file changed, 9 insertions(+)

    diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
    index 28344c3dfea1..4a070724a8fb 100644
    --- a/drivers/net/ethernet/ibm/ibmvnic.c
    +++ b/drivers/net/ethernet/ibm/ibmvnic.c
    @@ -5585,6 +5585,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 {
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-07-11 12:04    [W:3.321 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site