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;
|
delay = CEPH_MONC_PING_INTERVAL;
|
||||||
|
|
||||||
dout("__schedule_delayed after %lu\n", delay);
|
dout("__schedule_delayed after %lu\n", delay);
|
||||||
schedule_delayed_work(&monc->delayed_work,
|
mod_delayed_work(system_wq, &monc->delayed_work,
|
||||||
round_jiffies_relative(delay));
|
round_jiffies_relative(delay));
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *ceph_sub_str[] = {
|
const char *ceph_sub_str[] = {
|
||||||
@ -1166,9 +1166,9 @@ static void mon_fault(struct ceph_connection *con)
|
|||||||
if (!monc->hunting) {
|
if (!monc->hunting) {
|
||||||
dout("%s hunting for new mon\n", __func__);
|
dout("%s hunting for new mon\n", __func__);
|
||||||
reopen_session(monc);
|
reopen_session(monc);
|
||||||
} else {
|
|
||||||
/* already hunting, let's wait a bit */
|
|
||||||
__schedule_delayed(monc);
|
__schedule_delayed(monc);
|
||||||
|
} else {
|
||||||
|
dout("%s already hunting\n", __func__);
|
||||||
}
|
}
|
||||||
out:
|
out:
|
||||||
mutex_unlock(&monc->mutex);
|
mutex_unlock(&monc->mutex);
|
||||||
|
Loading…
Reference in New Issue
Block a user