• Alex Elder's avatar
    rbd: define common queue_con_delay() · 802c6d96
    Alex Elder authored
    This patch defines a single function, queue_con_delay() to call
    queue_delayed_work() for a connection.  It basically generalizes
    what was previously queue_con() by adding the delay argument.
    queue_con() is now a simple helper that passes 0 for its delay.
    queue_con_delay() returns 0 if it queued work or an errno if it
    did not for some reason.
    
    If con_work() finds the BACKOFF flag set for a connection, it now
    calls queue_con_delay() to handle arranging to start again after a
    delay.
    
    Note about connection reference counts:  con_work() only ever gets
    called as a work item function.  At the time that work is scheduled,
    a reference to the connection is acquired, and the corresponding
    con_work() call is then responsible for dropping that reference
    before it returns.
    
    Previously, the backoff handling inside con_work() silently handed
    off its reference to delayed work it scheduled.  Now that
    queue_con_delay() is used, a new reference is acquired for the
    newly-scheduled work, and the original reference is dropped by the
    con->ops->put() call at the end of the function.
    Signed-off-by: default avatarAlex Elder <elder@inktank.com>
    Reviewed-by: default avatarSage Weil <sage@inktank.com>
    802c6d96
messenger.c 70.6 KB