lkml.org 
[lkml]   [2023]   [Nov]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 02/41] rxrpc: Fix two connection reaping bugs
    Date
    Fix two connection reaping bugs:

    (1) rxrpc_connection_expiry is in units of seconds, so
    rxrpc_disconnect_call() needs to multiply it by HZ when adding it to
    jiffies.

    (2) rxrpc_client_conn_reap_timeout() should set RXRPC_CLIENT_REAP_TIMER if
    local->kill_all_client_conns is clear, not if it is set (in which case
    we don't need the timer). Without this, old client connections don't
    get cleaned up until the local endpoint is cleaned up.

    Fixes: 5040011d073d ("rxrpc: Make the local endpoint hold a ref on a connected call")
    Fixes: 0d6bf319bc5a ("rxrpc: Move the client conn cache management to the I/O thread")
    Signed-off-by: David Howells <dhowells@redhat.com>
    cc: Marc Dionne <marc.dionne@auristor.com>
    cc: "David S. Miller" <davem@davemloft.net>
    cc: Eric Dumazet <edumazet@google.com>
    cc: Jakub Kicinski <kuba@kernel.org>
    cc: Paolo Abeni <pabeni@redhat.com>
    cc: netdev@vger.kernel.org
    cc: linux-afs@lists.infradead.org
    ---
    net/rxrpc/conn_object.c | 2 +-
    net/rxrpc/local_object.c | 2 +-
    2 files changed, 2 insertions(+), 2 deletions(-)

    diff --git a/net/rxrpc/conn_object.c b/net/rxrpc/conn_object.c
    index ac85d4644a3c..df8a271948a1 100644
    --- a/net/rxrpc/conn_object.c
    +++ b/net/rxrpc/conn_object.c
    @@ -212,7 +212,7 @@ void rxrpc_disconnect_call(struct rxrpc_call *call)
    conn->idle_timestamp = jiffies;
    if (atomic_dec_and_test(&conn->active))
    rxrpc_set_service_reap_timer(conn->rxnet,
    - jiffies + rxrpc_connection_expiry);
    + jiffies + rxrpc_connection_expiry * HZ);
    }

    rxrpc_put_call(call, rxrpc_call_put_io_thread);
    diff --git a/net/rxrpc/local_object.c b/net/rxrpc/local_object.c
    index 7d910aee4f8c..c553a30e9c83 100644
    --- a/net/rxrpc/local_object.c
    +++ b/net/rxrpc/local_object.c
    @@ -87,7 +87,7 @@ static void rxrpc_client_conn_reap_timeout(struct timer_list *timer)
    struct rxrpc_local *local =
    container_of(timer, struct rxrpc_local, client_conn_reap_timer);

    - if (local->kill_all_client_conns &&
    + if (!local->kill_all_client_conns &&
    test_and_set_bit(RXRPC_CLIENT_CONN_REAP_TIMER, &local->client_conn_flags))
    rxrpc_wake_up_io_thread(local);
    }
    \
     
     \ /
      Last update: 2023-11-20 13:54    [W:2.511 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site