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: Sage Weil <sage@inktank.com> Reviewed-by: Yehuda Sadeh <yehuda@inktank.com> Reviewed-by: Alex Elder <elder@inktank.com>
This commit is contained in:
parent
a53aab645c
commit
5469155f2b
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue