mdsc->sessions[mds] = NULL;
}
-/* drop session refs in request */
+/*
+ * drop session refs in request.
+ *
+ * should be last ref, or hold mdsc->mutex
+ */
static void put_request_sessions(struct ceph_mds_request *req)
{
if (req->r_session) {
req->r_direct_mode = USE_AUTH_MDS;
req->r_num_stale++;
if (req->r_num_stale <= 2) {
+ mutex_unlock(&req->r_session->s_mutex);
+ mutex_lock(&mdsc->mutex);
put_request_sessions(req);
__do_request(mdsc, req);
- goto out_session_unlock;
+ mutex_unlock(&mdsc->mutex);
+ goto out;
}
} else {
req->r_num_stale = 0;