]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
uclient: keep MClientRequest local to send_request
authorSage Weil <sage@newdream.net>
Sat, 14 Nov 2009 00:26:59 +0000 (16:26 -0800)
committerSage Weil <sage@newdream.net>
Sat, 14 Nov 2009 00:26:59 +0000 (16:26 -0800)
src/client/Client.cc
src/client/Client.h

index b77cdf693139e6f38490ad1ffdf8459f5b99b322..08e6dfd4bb4620d4956f1ba57644010d2b8dd374 100644 (file)
@@ -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)
index 1c0947ba8d7b5f4cf5eda87dc0205da1fc465ea3..05c694215f2af3fa178abc27750d5bb680b67dc0 100644 (file)
@@ -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);