mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-17 02:15:57 +00:00
libceph: transition socket state prior to actual connect
Once we call ->connect(), we are racing against the actual connection, and a subsequent transition from CONNECTING -> CONNECTED. Set the state to CONNECTING before that, under the protection of the mutex, to avoid the race. This was introduced in 928443cd9644e7cfd46f687dbeffda2d1a357ff9, with the original socket state code. Signed-off-by: Sage Weil <sage@inktank.com> Reviewed-by: Alex Elder <elder@inktank.com>
This commit is contained in:
parent
a550604950
commit
89a86be0ce
@ -321,6 +321,7 @@ static int ceph_tcp_connect(struct ceph_connection *con)
|
||||
|
||||
dout("connect %s\n", ceph_pr_addr(&con->peer_addr.in_addr));
|
||||
|
||||
con_sock_state_connecting(con);
|
||||
ret = sock->ops->connect(sock, (struct sockaddr *)paddr, sizeof(*paddr),
|
||||
O_NONBLOCK);
|
||||
if (ret == -EINPROGRESS) {
|
||||
@ -336,8 +337,6 @@ static int ceph_tcp_connect(struct ceph_connection *con)
|
||||
return ret;
|
||||
}
|
||||
con->sock = sock;
|
||||
con_sock_state_connecting(con);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user