mirror of
https://github.com/followmsi/android_kernel_google_msm.git
synced 2024-11-06 23:17:41 +00:00
libceph: clear NEGOTIATING when done
(cherry picked from commit 3ec50d1868
)
A connection state's NEGOTIATING bit gets set while in CONNECTING
state after we have successfully exchanged a ceph banner and IP
addresses with the connection's peer (the server). But that bit
is not cleared again--at least not until another connection attempt
is initiated.
Instead, clear it as soon as the connection is fully established.
Also, clear it when a socket connection gets prematurely closed
in the midst of establishing a ceph connection (in case we had
reached the point where it was set).
Signed-off-by: Alex Elder <elder@inktank.com>
Reviewed-by: Sage Weil <sage@inktank.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
2a281c7aa6
commit
abb46df87f
1 changed files with 5 additions and 3 deletions
|
@ -1562,6 +1562,7 @@ static int process_connect(struct ceph_connection *con)
|
|||
fail_protocol(con);
|
||||
return -1;
|
||||
}
|
||||
clear_bit(NEGOTIATING, &con->state);
|
||||
clear_bit(CONNECTING, &con->state);
|
||||
con->peer_global_seq = le32_to_cpu(con->in_reply.global_seq);
|
||||
con->connect_seq++;
|
||||
|
@ -1951,7 +1952,6 @@ more:
|
|||
|
||||
/* open the socket first? */
|
||||
if (con->sock == NULL) {
|
||||
clear_bit(NEGOTIATING, &con->state);
|
||||
set_bit(CONNECTING, &con->state);
|
||||
|
||||
con_out_kvec_reset(con);
|
||||
|
@ -2190,10 +2190,12 @@ static void con_work(struct work_struct *work)
|
|||
mutex_lock(&con->mutex);
|
||||
restart:
|
||||
if (test_and_clear_bit(SOCK_CLOSED, &con->flags)) {
|
||||
if (test_and_clear_bit(CONNECTING, &con->state))
|
||||
if (test_and_clear_bit(CONNECTING, &con->state)) {
|
||||
clear_bit(NEGOTIATING, &con->state);
|
||||
con->error_msg = "connection failed";
|
||||
else
|
||||
} else {
|
||||
con->error_msg = "socket closed";
|
||||
}
|
||||
goto fault;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue