|
@@ -2398,24 +2398,8 @@ static void ceph_fault(struct ceph_connection *con)
|
|
|
con->delay = BASE_DELAY_INTERVAL;
|
|
|
else if (con->delay < MAX_DELAY_INTERVAL)
|
|
|
con->delay *= 2;
|
|
|
- con->ops->get(con);
|
|
|
- if (queue_delayed_work(ceph_msgr_wq, &con->work,
|
|
|
- round_jiffies_relative(con->delay))) {
|
|
|
- dout("fault queued %p delay %lu\n", con, con->delay);
|
|
|
- } else {
|
|
|
- con->ops->put(con);
|
|
|
- dout("fault failed to queue %p delay %lu, backoff\n",
|
|
|
- con, con->delay);
|
|
|
- /*
|
|
|
- * In many cases we see a socket state change
|
|
|
- * while con_work is running and end up
|
|
|
- * queuing (non-delayed) work, such that we
|
|
|
- * can't backoff with a delay. Set a flag so
|
|
|
- * that when con_work restarts we schedule the
|
|
|
- * delay then.
|
|
|
- */
|
|
|
- set_bit(CON_FLAG_BACKOFF, &con->flags);
|
|
|
- }
|
|
|
+ set_bit(CON_FLAG_BACKOFF, &con->flags);
|
|
|
+ queue_con(con);
|
|
|
}
|
|
|
|
|
|
out_unlock:
|