Commit 0f9af169 authored by Ilya Dryomov's avatar Ilya Dryomov

libceph: decouple hunting and subs management

Coupling hunting state with subscribe state is not a good idea.  Clear
hunting when we complete the authentication handshake.
Signed-off-by: default avatarIlya Dryomov <idryomov@gmail.com>
parent 02ac956c
...@@ -255,12 +255,6 @@ static void handle_subscribe_ack(struct ceph_mon_client *monc, ...@@ -255,12 +255,6 @@ static void handle_subscribe_ack(struct ceph_mon_client *monc,
seconds = le32_to_cpu(h->duration); seconds = le32_to_cpu(h->duration);
mutex_lock(&monc->mutex); mutex_lock(&monc->mutex);
if (monc->hunting) {
pr_info("mon%d %s session established\n",
monc->cur_mon,
ceph_pr_addr(&monc->con.peer_addr.in_addr));
monc->hunting = false;
}
dout("handle_subscribe_ack after %d seconds\n", seconds); dout("handle_subscribe_ack after %d seconds\n", seconds);
monc->sub_renew_after = monc->sub_sent + (seconds >> 1)*HZ - 1; monc->sub_renew_after = monc->sub_sent + (seconds >> 1)*HZ - 1;
monc->sub_sent = 0; monc->sub_sent = 0;
...@@ -877,6 +871,14 @@ void ceph_monc_stop(struct ceph_mon_client *monc) ...@@ -877,6 +871,14 @@ void ceph_monc_stop(struct ceph_mon_client *monc)
} }
EXPORT_SYMBOL(ceph_monc_stop); EXPORT_SYMBOL(ceph_monc_stop);
static void finish_hunting(struct ceph_mon_client *monc)
{
if (monc->hunting) {
dout("%s found mon%d\n", __func__, monc->cur_mon);
monc->hunting = false;
}
}
static void handle_auth_reply(struct ceph_mon_client *monc, static void handle_auth_reply(struct ceph_mon_client *monc,
struct ceph_msg *msg) struct ceph_msg *msg)
{ {
...@@ -890,11 +892,15 @@ static void handle_auth_reply(struct ceph_mon_client *monc, ...@@ -890,11 +892,15 @@ static void handle_auth_reply(struct ceph_mon_client *monc,
msg->front.iov_len, msg->front.iov_len,
monc->m_auth->front.iov_base, monc->m_auth->front.iov_base,
monc->m_auth->front_alloc_len); monc->m_auth->front_alloc_len);
if (ret > 0) {
__send_prepared_auth_request(monc, ret);
goto out;
}
finish_hunting(monc);
if (ret < 0) { if (ret < 0) {
monc->client->auth_err = ret; monc->client->auth_err = ret;
wake_up_all(&monc->client->auth_wq);
} else if (ret > 0) {
__send_prepared_auth_request(monc, ret);
} else if (!was_auth && ceph_auth_is_authenticated(monc->auth)) { } else if (!was_auth && ceph_auth_is_authenticated(monc->auth)) {
dout("authenticated, starting session\n"); dout("authenticated, starting session\n");
...@@ -904,8 +910,15 @@ static void handle_auth_reply(struct ceph_mon_client *monc, ...@@ -904,8 +910,15 @@ static void handle_auth_reply(struct ceph_mon_client *monc,
__send_subscribe(monc); __send_subscribe(monc);
__resend_generic_request(monc); __resend_generic_request(monc);
pr_info("mon%d %s session established\n", monc->cur_mon,
ceph_pr_addr(&monc->con.peer_addr.in_addr));
} }
out:
mutex_unlock(&monc->mutex); mutex_unlock(&monc->mutex);
if (monc->client->auth_err < 0)
wake_up_all(&monc->client->auth_wq);
} }
static int __validate_auth(struct ceph_mon_client *monc) static int __validate_auth(struct ceph_mon_client *monc)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment