From: Sage Weil Date: Sat, 14 Nov 2009 00:26:59 +0000 (-0800) Subject: uclient: keep MClientRequest local to send_request X-Git-Tag: v0.18~98^2~7^2~8 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e5ca40dd0c8d815ccd013428bddf973c7e965d3e;p=ceph.git uclient: keep MClientRequest local to send_request --- diff --git a/src/client/Client.cc b/src/client/Client.cc index b77cdf693139..08e6dfd4bb46 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -591,7 +591,6 @@ void Client::update_dir_dist(Inode *in, DirStat *dst) */ Inode* Client::insert_trace(MetaRequest *request, utime_t from, int mds) { - MClientRequest *req = request->request; MClientReply *reply = request->reply; dout(10) << "insert_trace from " << from << " mds" << mds << dendl; @@ -647,7 +646,7 @@ Inode* Client::insert_trace(MetaRequest *request, utime_t from, int mds) assert(inode_map.count(vino)); Inode *diri = inode_map[vino]; - string dname = req->get_filepath().last_dentry(); + string dname = request->path.last_dentry(); LeaseStat dlease; dlease.duration_ms = 0; @@ -1025,26 +1024,26 @@ void Client::encode_dentry_release(Dentry *dn, MClientRequest *req, * Additionally, if you set any *drop member, you'd better have * set the corresponding dentry! */ -void Client::encode_cap_releases(MetaRequest *req, int mds) { +void Client::encode_cap_releases(MetaRequest *req, MClientRequest *m, int mds) { dout(20) << "encode_cap_releases enter (req: " << req << ", mds: " << mds << ")" << dendl; if (req->inode_drop && req->inode) - encode_inode_release(req->inode, req->request, + encode_inode_release(req->inode, m, mds, req->inode_drop, req->inode_unless); if (req->old_inode_drop && req->old_inode) - encode_inode_release(req->old_inode, req->request, + encode_inode_release(req->old_inode, m, mds, req->old_inode_drop, req->old_inode_unless); if (req->dentry_drop && req->dentry) - encode_dentry_release(req->dentry, req->request, + encode_dentry_release(req->dentry, m, mds, req->dentry_drop, req->dentry_unless); if (req->old_dentry_drop && req->old_dentry) - encode_dentry_release(req->old_dentry, req->request, + encode_dentry_release(req->old_dentry, m, mds, req->old_dentry_drop, req->old_dentry_unless); dout(25) << "encode_cap_releases exit (req: " @@ -1100,33 +1099,28 @@ void Client::handle_client_session(MClientSession *m) void Client::send_request(MetaRequest *request, int mds) { - MClientRequest *r = request->request; // make the request dout(10) << "send_request rebuilding request " << request->get_tid() << " for mds" << mds << dendl; - r = make_request_from_Meta(request); + MClientRequest *r = make_request_from_Meta(request); if (request->dentry) r->set_dentry_wanted(); if (request->got_unsafe) r->set_replayed_op(); - - request->request = r; - encode_cap_releases(request, mds); - request->request = 0; - r->set_mdsmap_epoch(mdsmap->get_epoch()); + encode_cap_releases(request, r, mds); + if (request->mds == -1) { request->sent_stamp = g_clock.now(); dout(20) << "send_request set sent_stamp to " << request->sent_stamp << dendl; } + request->mds = mds; mds_sessions[mds].requests.push_back(&request->item); dout(10) << "send_request " << *r << " to mds" << mds << dendl; messenger->send_message(r, mdsmap->get_inst(mds)); - - request->mds = mds; } void Client::handle_client_request_forward(MClientRequestForward *fwd) diff --git a/src/client/Client.h b/src/client/Client.h index 1c0947ba8d7b..05c694215f2a 100644 --- a/src/client/Client.h +++ b/src/client/Client.h @@ -94,8 +94,6 @@ class Inode; class Dentry; struct MetaRequest { - MClientRequest *request; // the actual request to send out - //used in constructing MClientRequests ceph_mds_request_head head; filepath path, path2; bufferlist data; @@ -133,24 +131,8 @@ struct MetaRequest { Inode *target; - MetaRequest(MClientRequest *req, tid_t t) : - request(req), inode_drop(0), inode_unless(0), - old_inode_drop(0), old_inode_unless(0), - dentry_drop(0), dentry_unless(0), - old_dentry_drop(0), old_dentry_unless(0), - inode(NULL), old_inode(NULL), - dentry(NULL), old_dentry(NULL), - resend_mds(-1), num_fwd(0), retry_attempt(0), - ref(1), reply(0), - kick(false), got_safe(false), got_unsafe(false), item(this), unsafe_item(this), - lock("MetaRequest lock"), - caller_cond(0), dispatch_cond(0), - target(0) { - memcpy(&head, &req->head, sizeof(ceph_mds_request_head)); - } - MetaRequest(int op) : - request(NULL), inode_drop(0), inode_unless(0), + inode_drop(0), inode_unless(0), old_inode_drop(0), old_inode_unless(0), dentry_drop(0), dentry_unless(0), old_dentry_drop(0), old_dentry_unless(0), @@ -861,7 +843,7 @@ public: //MClientRequest *req, int uid, int gid, Inode **ptarget = 0, int use_mds=-1, bufferlist *pdirbl=0); - void encode_cap_releases(MetaRequest *request, int mds); + void encode_cap_releases(MetaRequest *request, MClientRequest *m, int mds); int encode_inode_release(Inode *in, MClientRequest *req, int mds, int drop, int unless,int force=0);