]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
client: properly set inode number of created inode in replay request 11419/head
authorYan, Zheng <zyan@redhat.com>
Fri, 2 Sep 2016 08:19:29 +0000 (16:19 +0800)
committerLoic Dachary <ldachary@redhat.com>
Tue, 11 Oct 2016 08:56:57 +0000 (10:56 +0200)
Fixes: http://tracker.ceph.com/issues/17172
Signed-off-by: Yan, Zheng <zyan@redhat.com>
(cherry picked from commit e59385f16afc607ec700397b0bea5229ce69df30)

src/client/Client.cc

index b465cadec55f2f337b6e74fce0b0d411f0cbe7b9..c8bba1ee9a827afb1d532bf07e2ee4d208cf9c2d 100644 (file)
@@ -1552,7 +1552,7 @@ int Client::verify_reply_trace(int r,
     *pcreated = got_created_ino;
 
   if (request->target) {
-    ptarget->swap(request->target);
+    *ptarget = request->target;
     ldout(cct, 20) << "make_request target is " << *ptarget->get() << dendl;
   } else {
     if (got_created_ino && (p = inode_map.find(vinodeno_t(created_ino, CEPH_NOSNAP))) != inode_map.end()) {
@@ -2126,6 +2126,8 @@ void Client::send_request(MetaRequest *request, MetaSession *session,
   }
   if (request->got_unsafe) {
     r->set_replayed_op();
+    if (request->target)
+      r->head.ino = request->target->ino;
   } else {
     encode_cap_releases(request, mds);
     if (drop_cap_releases) // we haven't send cap reconnect yet, drop cap releases