diff options
author | Ilya Dryomov | 2020-10-29 14:49:10 +0100 |
---|---|---|
committer | Ilya Dryomov | 2020-12-14 23:21:48 +0100 |
commit | 418af5b3bfc4f1ef4854e83c5be8a0bdce51e95c (patch) | |
tree | d2ebd1c8726c80c20b39ef9628f7558754332a0a /net | |
parent | b77f8f0e4f271c29cf5cc071ea1b6bc3a675b340 (diff) |
libceph: lower exponential backoff delay
The current setting allows the backoff to climb up to 5 minutes. This
is too high -- it becomes hard to tell whether the client is stuck on
something or just in backoff.
In userspace, ms_max_backoff is defaulted to 15 seconds. Let's do the
same.
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Diffstat (limited to 'net')
-rw-r--r-- | net/ceph/messenger.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c index 214ae2d17a90..f3eb66bab988 100644 --- a/net/ceph/messenger.c +++ b/net/ceph/messenger.c @@ -2812,6 +2812,9 @@ static int queue_con_delay(struct ceph_connection *con, unsigned long delay) return -ENOENT; } + if (delay >= HZ) + delay = round_jiffies_relative(delay); + dout("%s %p %lu\n", __func__, con, delay); if (!queue_delayed_work(ceph_msgr_wq, &con->work, delay)) { dout("%s %p - already queued\n", __func__, con); @@ -2871,7 +2874,7 @@ static bool con_backoff(struct ceph_connection *con) if (!con_flag_test_and_clear(con, CON_FLAG_BACKOFF)) return false; - ret = queue_con_delay(con, round_jiffies_relative(con->delay)); + ret = queue_con_delay(con, con->delay); if (ret) { dout("%s: con %p FAILED to back off %lu\n", __func__, con, con->delay); @@ -3018,10 +3021,13 @@ static void con_fault(struct ceph_connection *con) } else { /* retry after a delay. */ con->state = CON_STATE_PREOPEN; - if (con->delay == 0) + if (!con->delay) { con->delay = BASE_DELAY_INTERVAL; - else if (con->delay < MAX_DELAY_INTERVAL) + } else if (con->delay < MAX_DELAY_INTERVAL) { con->delay *= 2; + if (con->delay > MAX_DELAY_INTERVAL) + con->delay = MAX_DELAY_INTERVAL; + } con_flag_set(con, CON_FLAG_BACKOFF); queue_con(con); } |