• Alex Elder's avatar
    libceph: drop ceph_osd_request->r_con_filling_msg · ace6d3a9
    Alex Elder authored
    A field in an osd request keeps track of whether a connection is
    currently filling the request's reply message.  This patch gets rid
    of that field.
    
    An osd request includes two messages--a request and a reply--and
    they're both associated with the connection that existed to its
    the target osd at the time the request was created.
    
    An osd request can be dropped early, even when it's in flight.
    And at that time both messages are released.  It's possible the
    reply message has been supplied to its connection to receive
    an incoming response message at the time the osd request gets
    dropped.  So ceph_osdc_release_request() revokes that message
    from the connection before releasing it so things get cleaned up
    properly.
    
    Previously this may have caused a problem, because the connection
    that a message was associated with might have gone away before the
    revoke request.  And to avoid any problems using that connection,
    the osd client held a reference to it when it supplies its response
    message.
    
    However since this commit:
        38941f80 libceph: have messages point to their connection
    all messages hold a reference to the connection they are associated
    with whenever the connection is actively operating on the message
    (i.e. while the message is queued to send or sending, and when it
    data is being received into it).  And if a message has no connection
    associated with it, ceph_msg_revoke_incoming() won't do anything
    when asked to revoke it.
    
    As a result, there is no need to keep an additional reference to the
    connection associated with a message when we hand the message to the
    messenger when it calls our alloc_msg() method to receive something.
    If the connection *were* operating on it, it would have its own
    reference, and if not, there's no work to be done when we need to
    revoke it.
    
    So get rid of the osd request's r_con_filling_msg field.
    
    This resolves:
        http://tracker.ceph.com/issues/4647Signed-off-by: default avatarAlex Elder <elder@inktank.com>
    Reviewed-by: default avatarJosh Durgin <josh.durgin@inktank.com>
    ace6d3a9
osd_client.c 60.4 KB