kclient: clean up some mdsc locking

Do not drop mds mutex in __do_request().
This commit is contained in:
Sage Weil 2009-02-19 12:10:40 -08:00
parent 919b21429b
commit d7cb96bd12

View File

@ -599,19 +599,6 @@ static struct ceph_msg *create_session_msg(u32 op, u64 seq)
return msg; return msg;
} }
/*
* Register request with mon_client for a new mds map.
*
* called under mdsc->mutex.
*/
static void request_new_map(struct ceph_mds_client *mdsc)
{
dout(30, "request_new_map enter\n");
mutex_unlock(&mdsc->mutex);
ceph_monc_request_mdsmap(&mdsc->client->monc, mdsc->mdsmap->m_epoch+1);
mutex_lock(&mdsc->mutex);
}
/* /*
* send session open request. * send session open request.
* *
@ -630,7 +617,6 @@ static int __open_session(struct ceph_mds_client *mdsc,
dout(10, "open_session to mds%d, state %d\n", mds, mstate); dout(10, "open_session to mds%d, state %d\n", mds, mstate);
session->s_state = CEPH_MDS_SESSION_OPENING; session->s_state = CEPH_MDS_SESSION_OPENING;
session->s_renew_requested = jiffies; session->s_renew_requested = jiffies;
mutex_unlock(&mdsc->mutex);
/* send connect message */ /* send connect message */
msg = create_session_msg(CEPH_SESSION_REQUEST_OPEN, session->s_seq); msg = create_session_msg(CEPH_SESSION_REQUEST_OPEN, session->s_seq);
@ -641,7 +627,6 @@ static int __open_session(struct ceph_mds_client *mdsc,
ceph_send_msg_mds(mdsc, msg, mds); ceph_send_msg_mds(mdsc, msg, mds);
out: out:
mutex_lock(&mdsc->mutex);
return 0; return 0;
} }
@ -1122,7 +1107,8 @@ static int __do_request(struct ceph_mds_client *mdsc,
ceph_mdsmap_get_state(mdsc->mdsmap, mds) < CEPH_MDS_STATE_ACTIVE) { ceph_mdsmap_get_state(mdsc->mdsmap, mds) < CEPH_MDS_STATE_ACTIVE) {
dout(30, "do_request no mds or not active, waiting for map\n"); dout(30, "do_request no mds or not active, waiting for map\n");
list_add(&req->r_wait, &mdsc->waiting_for_map); list_add(&req->r_wait, &mdsc->waiting_for_map);
request_new_map(mdsc); ceph_monc_request_mdsmap(&mdsc->client->monc,
mdsc->mdsmap->m_epoch+1);
goto out; goto out;
} }
@ -1137,7 +1123,8 @@ static int __do_request(struct ceph_mds_client *mdsc,
session->s_state == CEPH_MDS_SESSION_CLOSING) session->s_state == CEPH_MDS_SESSION_CLOSING)
__open_session(mdsc, session); __open_session(mdsc, session);
list_add(&req->r_wait, &session->s_waiting); list_add(&req->r_wait, &session->s_waiting);
request_new_map(mdsc); ceph_monc_request_mdsmap(&mdsc->client->monc,
mdsc->mdsmap->m_epoch+1);
goto out_session; goto out_session;
} }
@ -1150,10 +1137,8 @@ static int __do_request(struct ceph_mds_client *mdsc,
err = __prepare_send_request(mdsc, req, mds); err = __prepare_send_request(mdsc, req, mds);
if (!err) { if (!err) {
mutex_unlock(&mdsc->mutex);
ceph_msg_get(req->r_request); ceph_msg_get(req->r_request);
ceph_send_msg_mds(mdsc, req->r_request, mds); ceph_send_msg_mds(mdsc, req->r_request, mds);
mutex_lock(&mdsc->mutex);
} }
out_session: out_session: