Commit fbb85a47 authored by Sage Weil's avatar Sage Weil

libceph: allow sock transition from CONNECTING to CLOSED

It is possible to close a socket that is in the OPENING state.  For
example, it can happen if ceph_con_close() is called on the con before
the TCP connection is established.  con_work() will come around and shut
down the socket.
Signed-off-by: default avatarSage Weil <sage@inktank.com>
parent 735a72ef
...@@ -48,17 +48,17 @@ ...@@ -48,17 +48,17 @@
* | ---------------------- * | ----------------------
* | \ * | \
* + con_sock_state_closed() \ * + con_sock_state_closed() \
* |\ \ * |+--------------------------- \
* | \ \ * | \ \ \
* | ----------- \ * | ----------- \ \
* | | CLOSING | socket event; \ * | | CLOSING | socket event; \ \
* | ----------- await close \ * | ----------- await close \ \
* | ^ | * | ^ \ |
* | | | * | | \ |
* | + con_sock_state_closing() | * | + con_sock_state_closing() \ |
* | / \ | * | / \ | |
* | / --------------- | * | / --------------- | |
* | / \ v * | / \ v v
* | / -------------- * | / --------------
* | / -----------------| CONNECTING | socket created, TCP * | / -----------------| CONNECTING | socket created, TCP
* | | / -------------- connect initiated * | | / -------------- connect initiated
...@@ -241,7 +241,8 @@ static void con_sock_state_closed(struct ceph_connection *con) ...@@ -241,7 +241,8 @@ static void con_sock_state_closed(struct ceph_connection *con)
old_state = atomic_xchg(&con->sock_state, CON_SOCK_STATE_CLOSED); old_state = atomic_xchg(&con->sock_state, CON_SOCK_STATE_CLOSED);
if (WARN_ON(old_state != CON_SOCK_STATE_CONNECTED && if (WARN_ON(old_state != CON_SOCK_STATE_CONNECTED &&
old_state != CON_SOCK_STATE_CLOSING)) old_state != CON_SOCK_STATE_CLOSING &&
old_state != CON_SOCK_STATE_CONNECTING))
printk("%s: unexpected old state %d\n", __func__, old_state); printk("%s: unexpected old state %d\n", __func__, old_state);
} }
......
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