libceph: reschedule tick in mon_fault()
Doing __schedule_delayed() in the hunting branch is pointless, as the tick will have already been scheduled by then. What we need to do instead is *reschedule* it in the !hunting branch, after reopen_session() changes hunt_mult, which affects the delay. This helps with spacing out connection attempts and avoiding things like two back-to-back attempts followed by a longer period of waiting around. Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
This commit is contained in:
parent
1752b50ca2
commit
bee3a37c47
|
@ -222,8 +222,8 @@ static void __schedule_delayed(struct ceph_mon_client *monc)
|
|||
delay = CEPH_MONC_PING_INTERVAL;
|
||||
|
||||
dout("__schedule_delayed after %lu\n", delay);
|
||||
schedule_delayed_work(&monc->delayed_work,
|
||||
round_jiffies_relative(delay));
|
||||
mod_delayed_work(system_wq, &monc->delayed_work,
|
||||
round_jiffies_relative(delay));
|
||||
}
|
||||
|
||||
const char *ceph_sub_str[] = {
|
||||
|
@ -1166,9 +1166,9 @@ static void mon_fault(struct ceph_connection *con)
|
|||
if (!monc->hunting) {
|
||||
dout("%s hunting for new mon\n", __func__);
|
||||
reopen_session(monc);
|
||||
} else {
|
||||
/* already hunting, let's wait a bit */
|
||||
__schedule_delayed(monc);
|
||||
} else {
|
||||
dout("%s already hunting\n", __func__);
|
||||
}
|
||||
out:
|
||||
mutex_unlock(&monc->mutex);
|
||||
|
|
Loading…
Reference in New Issue