If the connection quickly fails before the private session reference
can be associated with the connection, the connection will remain
closed and any OSD ops against the session will remain stuck.
Fixes: http://tracker.ceph.com/issues/36183
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
(cherry picked from commit
74ca33cb49d2c258324447b1ca366ed4e604202a)
void Objecter::_reopen_session(OSDSession *s)
{
+ // rwlock is locked unique
// s->lock is locked
entity_inst_t inst = osdmap->get_inst(s->osd);
if (!initialized)
return false;
if (con->get_peer_type() == CEPH_ENTITY_TYPE_OSD) {
+ unique_lock wl(rwlock);
+
auto priv = con->get_priv();
auto session = static_cast<OSDSession*>(priv.get());
if (session) {
ldout(cct, 1) << "ms_handle_reset " << con << " session " << session
<< " osd." << session->osd << dendl;
- unique_lock wl(rwlock);
if (!initialized) {
wl.unlock();
return false;