]> git.baikalelectronics.ru Git - kernel.git/commit
libceph: start tracking connection socket state
authorAlex Elder <elder@inktank.com>
Wed, 23 May 2012 03:15:49 +0000 (22:15 -0500)
committerAlex Elder <elder@dreamhost.com>
Fri, 1 Jun 2012 13:37:56 +0000 (08:37 -0500)
commit3d83978221255fa2408c95ce887523c98b3181ae
tree883ce31b9da920f7e4d68302569fd0143d14b264
parent8f513f166bd40fad2a44b67f5a4e150d8a4c21ec
libceph: start tracking connection socket state

Start explicitly keeping track of the state of a ceph connection's
socket, separate from the state of the connection itself.  Create
placeholder functions to encapsulate the state transitions.

    --------
    | NEW* |  transient initial state
    --------
        | con_sock_state_init()
        v
    ----------
    | CLOSED |  initialized, but no socket (and no
    ----------  TCP connection)
     ^      \
     |       \ con_sock_state_connecting()
     |        ----------------------
     |                              \
     + con_sock_state_closed()       \
     |\                               \
     | \                               \
     |  -----------                     \
     |  | CLOSING |  socket event;       \
     |  -----------  await close          \
     |       ^                            |
     |       |                            |
     |       + con_sock_state_closing()   |
     |      / \                           |
     |     /   ---------------            |
     |    /                   \           v
     |   /                    --------------
     |  /    -----------------| CONNECTING |  socket created, TCP
     |  |   /                 --------------  connect initiated
     |  |   | con_sock_state_connected()
     |  |   v
    -------------
    | CONNECTED |  TCP connection established
    -------------

Make the socket state an atomic variable, reinforcing that it's a
distinct transtion with no possible "intermediate/both" states.
This is almost certainly overkill at this point, though the
transitions into CONNECTED and CLOSING state do get called via
socket callback (the rest of the transitions occur with the
connection mutex held).  We can back out the atomicity later.

Signed-off-by: Alex Elder <elder@inktank.com>
Reviewed-by: Sage Weil<sage@inktank.com>
include/linux/ceph/messenger.h
net/ceph/messenger.c