mirror of
https://github.com/torvalds/linux.git
synced 2024-11-05 19:41:54 +00:00
libceph: encapsulate connection backoff
Collect the code that tests for and implements a backoff delay for a ceph connection into a new function, ceph_backoff(). Make the debug output messages in that part of the code report things consistently by reporting a message in the socket closed case, and by making the one for PREOPEN state report the connection pointer like the rest. Signed-off-by: Alex Elder <elder@inktank.com> Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
This commit is contained in:
parent
1541716789
commit
f20a39fd6e
@ -2345,6 +2345,24 @@ static bool con_sock_closed(struct ceph_connection *con)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool con_backoff(struct ceph_connection *con)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (!con_flag_test_and_clear(con, CON_FLAG_BACKOFF))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
ret = queue_con_delay(con, round_jiffies_relative(con->delay));
|
||||||
|
if (ret) {
|
||||||
|
dout("%s: con %p FAILED to back off %lu\n", __func__,
|
||||||
|
con, con->delay);
|
||||||
|
BUG_ON(ret == -ENOENT);
|
||||||
|
con_flag_set(con, CON_FLAG_BACKOFF);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Do some work on a connection. Drop a connection ref when we're done.
|
* Do some work on a connection. Drop a connection ref when we're done.
|
||||||
*/
|
*/
|
||||||
@ -2356,21 +2374,14 @@ static void con_work(struct work_struct *work)
|
|||||||
|
|
||||||
mutex_lock(&con->mutex);
|
mutex_lock(&con->mutex);
|
||||||
restart:
|
restart:
|
||||||
if (con_sock_closed(con))
|
if (con_sock_closed(con)) {
|
||||||
|
dout("%s: con %p SOCK_CLOSED\n", __func__, con);
|
||||||
goto fault;
|
goto fault;
|
||||||
|
}
|
||||||
if (con_flag_test_and_clear(con, CON_FLAG_BACKOFF)) {
|
if (con_backoff(con)) {
|
||||||
dout("con_work %p backing off\n", con);
|
dout("%s: con %p BACKOFF\n", __func__, con);
|
||||||
ret = queue_con_delay(con, round_jiffies_relative(con->delay));
|
|
||||||
if (ret) {
|
|
||||||
dout("con_work %p FAILED to back off %lu\n", con,
|
|
||||||
con->delay);
|
|
||||||
BUG_ON(ret == -ENOENT);
|
|
||||||
con_flag_set(con, CON_FLAG_BACKOFF);
|
|
||||||
}
|
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (con->state == CON_STATE_STANDBY) {
|
if (con->state == CON_STATE_STANDBY) {
|
||||||
dout("con_work %p STANDBY\n", con);
|
dout("con_work %p STANDBY\n", con);
|
||||||
goto done;
|
goto done;
|
||||||
@ -2381,7 +2392,7 @@ restart:
|
|||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
if (con->state == CON_STATE_PREOPEN) {
|
if (con->state == CON_STATE_PREOPEN) {
|
||||||
dout("con_work OPENING\n");
|
dout("%s: con %p OPENING\n", __func__, con);
|
||||||
BUG_ON(con->sock);
|
BUG_ON(con->sock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user