if (mds >= mdsc->max_sessions || mdsc->sessions[mds] == 0)
return NULL;
session = mdsc->sessions[mds];
+ dout(30, "get_mds_session %p %d -> %d\n", session,
+ atomic_read(&session->s_ref), atomic_read(&session->s_ref)+1);
atomic_inc(&session->s_ref);
return session;
}
ceph_msg_get(msg);
ceph_send_msg_mds(mdsc, msg, mds);
mutex_unlock(&session->s_mutex);
+ ceph_put_mds_session(session);
return;
bad:
mutex_lock(&mdsc->mutex);
for (i = 0; i < mdsc->max_sessions; i++) {
- struct ceph_mds_session *session = __ceph_get_mds_session(mdsc, i);
+ struct ceph_mds_session *session =
+ __ceph_get_mds_session(mdsc, i);
if (!session)
continue;
- //mutex_unlock(&mdsc->mutex);
remove_session_leases(session);
- //mutex_lock(&mdsc->mutex);
+ ceph_put_mds_session(session);
}
mutex_unlock(&mdsc->mutex);
}
session = __ceph_get_mds_session(mdsc, i);
if (!session)
continue;
- //mutex_unlock(&mdsc->mutex);
close_session(mdsc, session);
- //mutex_lock(&mdsc->mutex);
+ ceph_put_mds_session(session);
n++;
}
if (n == 0)