Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5469155f authored by Sage Weil's avatar Sage Weil
Browse files

libceph: protect ceph_con_open() with mutex



Take the con mutex while we are initiating a ceph open.  This is necessary
because the may have previously been in use and then closed, which could
result in a racing workqueue running con_work().

Signed-off-by: default avatarSage Weil <sage@inktank.com>
Reviewed-by: default avatarYehuda Sadeh <yehuda@inktank.com>
Reviewed-by: default avatarAlex Elder <elder@inktank.com>
parent a53aab64
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -537,6 +537,7 @@ void ceph_con_open(struct ceph_connection *con,
		   __u8 entity_type, __u64 entity_num,
		   struct ceph_entity_addr *addr)
{
	mutex_lock(&con->mutex);
	dout("con_open %p %s\n", con, ceph_pr_addr(&addr->in_addr));
	set_bit(OPENING, &con->state);
	WARN_ON(!test_and_clear_bit(CLOSED, &con->state));
@@ -546,6 +547,7 @@ void ceph_con_open(struct ceph_connection *con,

	memcpy(&con->peer_addr, addr, sizeof(*addr));
	con->delay = 0;      /* reset backoff memory */
	mutex_unlock(&con->mutex);
	queue_con(con);
}
EXPORT_SYMBOL(ceph_con_open);