]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
add stray_prior_path to store path before unlink
authorJashan Kamboj <jashank42@gmail.com>
Tue, 28 Jul 2015 16:54:36 +0000 (22:24 +0530)
committerSage Weil <sage@redhat.com>
Thu, 1 Oct 2015 13:39:33 +0000 (09:39 -0400)
Signed-off-by: Jashan Kamboj <jashank42@gmail.com>
src/mds/Server.cc
src/mds/mdstypes.cc
src/mds/mdstypes.h

index 9a5f07441205d389da4e0488f6d9d3cea137a0fe..2247795010eef37c2fb6ca24dc9bbf1b9698a12d 100644 (file)
@@ -5384,6 +5384,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);
   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();
index d0218ec8061264f34f01e0a1b99371d269e23412..3e3400ba7b339cf8fe5f6f78fcbe64b4659ea3f6 100644 (file)
@@ -256,7 +256,7 @@ void inline_data_t::decode(bufferlist::iterator &p)
  */
 void inode_t::encode(bufferlist &bl) const
 {
-  ENCODE_START(11, 6, bl);
+  ENCODE_START(12, 6, bl);
 
   ::encode(ino, bl);
   ::encode(rdev, bl);
@@ -298,12 +298,14 @@ void inode_t::encode(bufferlist &bl) const
   ::encode(inline_data, bl);
   ::encode(quota, bl);
 
+  ::encode(stray_prior_path, bl);
+
   ENCODE_FINISH(bl);
 }
 
 void inode_t::decode(bufferlist::iterator &p)
 {
-  DECODE_START_LEGACY_COMPAT_LEN(11, 6, 6, p);
+  DECODE_START_LEGACY_COMPAT_LEN(12, 6, 6, p);
 
   ::decode(ino, p);
   ::decode(rdev, p);
@@ -367,6 +369,8 @@ void inode_t::decode(bufferlist::iterator &p)
     backtrace_version = 0; // force update backtrace
   if (struct_v >= 11)
     ::decode(quota, p);
+  if (struct_v >= 12)
+    ::decode(stray_prior_path, p);
 
   DECODE_FINISH(p);
 }
@@ -430,6 +434,8 @@ void inode_t::dump(Formatter *f) const
   f->dump_unsigned("file_data_version", file_data_version);
   f->dump_unsigned("xattr_version", xattr_version);
   f->dump_unsigned("backtrace_version", backtrace_version);
+
+  f->dump_string("stray_prior_path", stray_prior_path);
 }
 
 void inode_t::generate_test_instances(list<inode_t*>& ls)
index 72ff4fc4ffc0b7feaab91c2648ebe9ecc4836daa..929d36207238bea1c893c8c1325982e50d75a120 100644 (file)
@@ -467,6 +467,8 @@ struct inode_t {
 
   snapid_t oldest_snap;
 
+  string stray_prior_path; //stores path before unlink
+
   inode_t() : ino(0), rdev(0),
              mode(0), uid(0), gid(0), nlink(0),
              size(0), max_size_ever(0),