]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: save projected path into inode_t::stray_prior_path 16150/head
authorYan, Zheng <zyan@redhat.com>
Wed, 21 Jun 2017 07:48:54 +0000 (15:48 +0800)
committerVicente Cheng <freeze.bilsted@gmail.com>
Thu, 6 Jul 2017 02:48:37 +0000 (10:48 +0800)
Otherwise, path string like #10000000000/xxx may get saved into
inode_t::stray_prior_path.

Fixes: http://tracker.ceph.com/issues/20340
Signed-off-by: "Yan, Zheng" <zyan@redhat.com>
(cherry picked from commit ba7472cbf2a3147136a31b611f7b88f883be5f6d)

Conflicts:
src/mds/Server.cc
          - remove counter `change_attr` because it does not involved

src/mds/Server.cc

index 44d3eaada2322cdb3ae612d098c77dd83671c527..236227a5f5529edb9483a82d153a325c3edfdb07 100644 (file)
@@ -5588,7 +5588,7 @@ void Server::_unlink_local(MDRequestRef& mdr, CDentry *dn, CDentry *straydn)
   dn->pre_dirty();
 
   inode_t *pi = in->project_inode();
-  dn->make_path_string(pi->stray_prior_path);
+  dn->make_path_string(pi->stray_prior_path, true);
   mdr->add_projected_inode(in); // do this _after_ my dn->pre_dirty().. we apply that one manually.
   pi->version = in->pre_dirty();
   pi->ctime = mdr->get_op_stamp();
@@ -6778,7 +6778,7 @@ void Server::_rename_prepare(MDRequestRef& mdr,
     }
     if (tpi) {
       tpi->ctime = mdr->get_op_stamp();
-      destdn->make_path_string(tpi->stray_prior_path);
+      destdn->make_path_string(tpi->stray_prior_path, true);
       tpi->nlink--;
       if (tpi->nlink == 0)
        oldin->state_set(CInode::STATE_ORPHAN);