]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: set rctime on new system inode
authorPatrick Donnelly <pdonnell@redhat.com>
Wed, 26 Sep 2018 17:08:45 +0000 (10:08 -0700)
committerNathan Cutler <ncutler@suse.com>
Sun, 11 Nov 2018 10:30:07 +0000 (11:30 +0100)
Fixes: http://tracker.ceph.com/issues/36221
Signed-off-by: Patrick Donnelly <pdonnell@redhat.com>
(cherry picked from commit a6fe15a29e53995e10e79e1338801cd53232ee38)

Conflicts:
src/mds/MDCache.cc
- master uses g_conf(), mimic g_conf
- master uses ceph_assert, mimic assert

src/mds/MDCache.cc

index 390f662ef3498e89d37c0ed12a19d0c8f8c0f08d..8158e222edcd37d9640b74271a9f36d4bcb55a0b 100644 (file)
@@ -404,7 +404,8 @@ void MDCache::create_unlinked_system_inode(CInode *in, inodeno_t ino,
   memset(&in->inode.dir_layout, 0, sizeof(in->inode.dir_layout));
   if (in->inode.is_dir()) {
     in->inode.dir_layout.dl_dir_hash = g_conf->mds_default_dir_hash;
-    ++in->inode.rstat.rsubdirs;
+    in->inode.rstat.rsubdirs = 1; /* itself */
+    in->inode.rstat.rctime = in->inode.ctime;
   } else {
     in->inode.layout = default_file_layout;
     ++in->inode.rstat.rfiles;
@@ -451,13 +452,12 @@ void MDCache::create_empty_hierarchy(MDSGather *gather)
   adjust_subtree_auth(rootdir, mds->get_nodeid());   
   rootdir->dir_rep = CDir::REP_ALL;   //NONE;
 
-  rootdir->fnode.accounted_fragstat = rootdir->fnode.fragstat;
-  rootdir->fnode.accounted_rstat = rootdir->fnode.rstat;
-
-  root->inode.dirstat = rootdir->fnode.fragstat;
-  root->inode.rstat = rootdir->fnode.rstat;
-  ++root->inode.rstat.rsubdirs;
-  root->inode.accounted_rstat = root->inode.rstat;
+  assert(rootdir->fnode.accounted_fragstat == rootdir->fnode.fragstat);
+  assert(rootdir->fnode.fragstat == root->inode.dirstat);
+  assert(rootdir->fnode.accounted_rstat == rootdir->fnode.rstat);
+  /* Do no update rootdir rstat information of the fragment, rstat upkeep magic
+   * assume version 0 is stale/invalid.
+   */
 
   rootdir->mark_complete();
   rootdir->mark_dirty(rootdir->pre_dirty(), mds->mdlog->get_current_segment());