Commit 9cf54563 authored by Xiubo Li's avatar Xiubo Li Committed by Ilya Dryomov

ceph: add __send_request helper

Signed-off-by: default avatarXiubo Li <xiubli@redhat.com>
Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
Signed-off-by: default avatarIlya Dryomov <idryomov@gmail.com>
parent 9a6bed4f
...@@ -2522,6 +2522,26 @@ static int __prepare_send_request(struct ceph_mds_client *mdsc, ...@@ -2522,6 +2522,26 @@ static int __prepare_send_request(struct ceph_mds_client *mdsc,
return 0; return 0;
} }
/*
* called under mdsc->mutex
*/
static int __send_request(struct ceph_mds_client *mdsc,
struct ceph_mds_session *session,
struct ceph_mds_request *req,
bool drop_cap_releases)
{
int err;
err = __prepare_send_request(mdsc, req, session->s_mds,
drop_cap_releases);
if (!err) {
ceph_msg_get(req->r_request);
ceph_con_send(&session->s_con, req->r_request);
}
return err;
}
/* /*
* send request, or put it on the appropriate wait list. * send request, or put it on the appropriate wait list.
*/ */
...@@ -2611,11 +2631,7 @@ static void __do_request(struct ceph_mds_client *mdsc, ...@@ -2611,11 +2631,7 @@ static void __do_request(struct ceph_mds_client *mdsc,
if (req->r_request_started == 0) /* note request start time */ if (req->r_request_started == 0) /* note request start time */
req->r_request_started = jiffies; req->r_request_started = jiffies;
err = __prepare_send_request(mdsc, req, mds, false); err = __send_request(mdsc, session, req, false);
if (!err) {
ceph_msg_get(req->r_request);
ceph_con_send(&session->s_con, req->r_request);
}
out_session: out_session:
ceph_put_mds_session(session); ceph_put_mds_session(session);
...@@ -3217,7 +3233,6 @@ static void handle_session(struct ceph_mds_session *session, ...@@ -3217,7 +3233,6 @@ static void handle_session(struct ceph_mds_session *session,
return; return;
} }
/* /*
* called under session->mutex. * called under session->mutex.
*/ */
...@@ -3226,18 +3241,12 @@ static void replay_unsafe_requests(struct ceph_mds_client *mdsc, ...@@ -3226,18 +3241,12 @@ static void replay_unsafe_requests(struct ceph_mds_client *mdsc,
{ {
struct ceph_mds_request *req, *nreq; struct ceph_mds_request *req, *nreq;
struct rb_node *p; struct rb_node *p;
int err;
dout("replay_unsafe_requests mds%d\n", session->s_mds); dout("replay_unsafe_requests mds%d\n", session->s_mds);
mutex_lock(&mdsc->mutex); mutex_lock(&mdsc->mutex);
list_for_each_entry_safe(req, nreq, &session->s_unsafe, r_unsafe_item) { list_for_each_entry_safe(req, nreq, &session->s_unsafe, r_unsafe_item)
err = __prepare_send_request(mdsc, req, session->s_mds, true); __send_request(mdsc, session, req, true);
if (!err) {
ceph_msg_get(req->r_request);
ceph_con_send(&session->s_con, req->r_request);
}
}
/* /*
* also re-send old requests when MDS enters reconnect stage. So that MDS * also re-send old requests when MDS enters reconnect stage. So that MDS
...@@ -3252,14 +3261,8 @@ static void replay_unsafe_requests(struct ceph_mds_client *mdsc, ...@@ -3252,14 +3261,8 @@ static void replay_unsafe_requests(struct ceph_mds_client *mdsc,
if (req->r_attempts == 0) if (req->r_attempts == 0)
continue; /* only old requests */ continue; /* only old requests */
if (req->r_session && if (req->r_session &&
req->r_session->s_mds == session->s_mds) { req->r_session->s_mds == session->s_mds)
err = __prepare_send_request(mdsc, req, __send_request(mdsc, session, req, true);
session->s_mds, true);
if (!err) {
ceph_msg_get(req->r_request);
ceph_con_send(&session->s_con, req->r_request);
}
}
} }
mutex_unlock(&mdsc->mutex); mutex_unlock(&mdsc->mutex);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment