aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/ceph/messenger.h
diff options
context:
space:
mode:
authorAlex Elder <elder@inktank.com>2012-05-22 23:15:49 -0400
committerAlex Elder <elder@dreamhost.com>2012-06-01 09:37:56 -0400
commitce2c8903e76e690846a00a0284e4bd9ee954d680 (patch)
tree883ce31b9da920f7e4d68302569fd0143d14b264 /include/linux/ceph/messenger.h
parent928443cd9644e7cfd46f687dbeffda2d1a357ff9 (diff)
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>
Diffstat (limited to 'include/linux/ceph/messenger.h')
-rw-r--r--include/linux/ceph/messenger.h8
1 files changed, 6 insertions, 2 deletions
diff --git a/include/linux/ceph/messenger.h b/include/linux/ceph/messenger.h
index 920235e114ad..5e852f444f68 100644
--- a/include/linux/ceph/messenger.h
+++ b/include/linux/ceph/messenger.h
@@ -137,14 +137,18 @@ struct ceph_connection {
137 const struct ceph_connection_operations *ops; 137 const struct ceph_connection_operations *ops;
138 138
139 struct ceph_messenger *msgr; 139 struct ceph_messenger *msgr;
140
141 atomic_t sock_state;
140 struct socket *sock; 142 struct socket *sock;
143 struct ceph_entity_addr peer_addr; /* peer address */
144 struct ceph_entity_addr peer_addr_for_me;
145
141 unsigned long flags; 146 unsigned long flags;
142 unsigned long state; 147 unsigned long state;
143 const char *error_msg; /* error message, if any */ 148 const char *error_msg; /* error message, if any */
144 149
145 struct ceph_entity_addr peer_addr; /* peer address */
146 struct ceph_entity_name peer_name; /* peer name */ 150 struct ceph_entity_name peer_name; /* peer name */
147 struct ceph_entity_addr peer_addr_for_me; 151
148 unsigned peer_features; 152 unsigned peer_features;
149 u32 connect_seq; /* identify the most recent connection 153 u32 connect_seq; /* identify the most recent connection
150 attempt for this connection, client */ 154 attempt for this connection, client */