]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: properly record created inode in completed requests list 3599/head
authorYan, Zheng <zyan@redhat.com>
Wed, 4 Feb 2015 04:47:36 +0000 (12:47 +0800)
committerYan, Zheng <zyan@redhat.com>
Wed, 4 Feb 2015 06:53:47 +0000 (14:53 +0800)
current code does not handle case that inode is allocated from session's
preallocated inodes

Signed-off-by: Yan, Zheng <zyan@redhat.com>
src/mds/Server.cc
src/mds/journal.cc

index ce56c7e716175ce221a85eb62a4ce06d054c2064..877eac86dcb43042c18430a29b380a29059d2d92 100644 (file)
@@ -1049,8 +1049,10 @@ void Server::reply_client_request(MDRequestRef& mdr, MClientReply *reply)
   mdr->mark_event("replying");
 
   // note successful request in session map?
-  if (req->may_write() && mdr->session && reply->get_result() == 0)
-    mdr->session->add_completed_request(mdr->reqid.tid, mdr->alloc_ino);
+  if (req->may_write() && mdr->session && reply->get_result() == 0) {
+    inodeno_t created = mdr->alloc_ino ? mdr->alloc_ino : mdr->used_prealloc_ino;
+    mdr->session->add_completed_request(mdr->reqid.tid, created);
+  }
 
   // give any preallocated inos to the session
   apply_allocated_inos(mdr);
index c0530bc87076c6d5eeba5ce2ecd89f5edc1b0252..bbb033eafafe5348bcc164ed1e4ece29bd805968 100644 (file)
@@ -1572,13 +1572,13 @@ void EMetaBlob::replay(MDS *mds, LogSegment *logseg, MDSlaveUpdate *slaveup)
        ++p) {
     if (p->first.name.is_client()) {
       dout(10) << "EMetaBlob.replay request " << p->first << " trim_to " << p->second << dendl;
-
+      inodeno_t created = allocated_ino ? allocated_ino : used_preallocated_ino;
       // if we allocated an inode, there should be exactly one client request id.
-      assert(allocated_ino == inodeno_t() || client_reqs.size() == 1);
+      assert(created == inodeno_t() || client_reqs.size() == 1);
 
       Session *session = mds->sessionmap.get_session(p->first.name);
       if (session) {
-       session->add_completed_request(p->first.tid, allocated_ino);
+       session->add_completed_request(p->first.tid, created);
        if (p->second)
          session->trim_completed_requests(p->second);
       }