Skip to content

Commit

Permalink
libceph: allow sock transition from CONNECTING to CLOSED
Browse files Browse the repository at this point in the history
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: Sage Weil <sage@inktank.com>
  • Loading branch information
Sage Weil committed Jul 6, 2012
1 parent 735a72e commit fbb85a4
Showing 1 changed file with 13 additions and 12 deletions.
25 changes: 13 additions & 12 deletions net/ceph/messenger.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,17 +48,17 @@
* | ----------------------
* | \
* + con_sock_state_closed() \
* |\ \
* | \ \
* | ----------- \
* | | CLOSING | socket event; \
* | ----------- await close \
* | ^ |
* | | |
* | + con_sock_state_closing() |
* | / \ |
* | / --------------- |
* | / \ v
* |+--------------------------- \
* | \ \ \
* | ----------- \ \
* | | CLOSING | socket event; \ \
* | ----------- await close \ \
* | ^ \ |
* | | \ |
* | + con_sock_state_closing() \ |
* | / \ | |
* | / --------------- | |
* | / \ v v
* | / --------------
* | / -----------------| CONNECTING | socket created, TCP
* | | / -------------- connect initiated
Expand Down Expand Up @@ -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);
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);
}

Expand Down

0 comments on commit fbb85a4

Please sign in to comment.