]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
client: properly set inode number of created inode in replay request 10957/head
authorYan, Zheng <zyan@redhat.com>
Fri, 2 Sep 2016 08:19:29 +0000 (16:19 +0800)
committerYan, Zheng <zyan@redhat.com>
Fri, 2 Sep 2016 12:38:41 +0000 (20:38 +0800)
Fixes: http://tracker.ceph.com/issues/17172
Signed-off-by: Yan, Zheng <zyan@redhat.com>
src/client/Client.cc

index 4af0fe0f8aa94dbd2a70293657fc632e971880a0..0125e04c8b551aa211a3d9fc351d2c1f0fe59d6a 100644 (file)
@@ -1531,7 +1531,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()) {
@@ -2106,6 +2106,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