• David Howells's avatar
    rxrpc: Move usage count getting into rxrpc_queue_conn() · 2c4579e4
    David Howells authored
    Rather than calling rxrpc_get_connection() manually before calling
    rxrpc_queue_conn(), do it inside the queue wrapper.
    
    This allows us to do some important fixes:
    
     (1) If the usage count is 0, do nothing.  This prevents connections from
         being reanimated once they're dead.
    
     (2) If rxrpc_queue_work() fails because the work item is already queued,
         retract the usage count increment which would otherwise be lost.
    
     (3) Don't take a ref on the connection in the work function.  By passing
         the ref through the work item, this is unnecessary.  Doing it in the
         work function is too late anyway.  Previously, connection-directed
         packets held a ref on the connection, but that's not really the best
         idea.
    
    And another useful changes:
    
     (*) Don't need to take a refcount on the connection in the data_ready
         handler unless we invoke the connection's work item.  We're using RCU
         there so that's otherwise redundant.
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    2c4579e4
ar-internal.h 29.6 KB