]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: mark scatterlocks with dirty rstat/fragstat during replay
authorSage Weil <sage@newdream.net>
Wed, 4 Nov 2009 23:22:54 +0000 (15:22 -0800)
committerSage Weil <sage@newdream.net>
Wed, 4 Nov 2009 23:22:54 +0000 (15:22 -0800)
This ensures we propagate this info back toward the root
after we've replayed and gone active.

src/mds/journal.cc

index fc7c915f66b8907d8b30a5718bab6e8ec3c070fc..e4b301827ebec2e4b8ae63fae6e0b8e397b1b502 100644 (file)
@@ -401,6 +401,15 @@ void EMetaBlob::replay(MDS *mds, LogSegment *logseg)
       dir->_mark_dirty(logseg);
       dir->get_inode()->filelock.mark_dirty();
       dir->get_inode()->nestlock.mark_dirty();
+
+      if (!(dir->fnode.rstat == dir->fnode.accounted_rstat) ||
+         !(dir->fnode.fragstat == dir->fnode.accounted_fragstat)) {
+       dout(10) << "EMetaBlob.replay      dirty nestinfo on " << *dir << dendl;
+       mds->locker->mark_updated_scatterlock(&dir->inode->nestlock);
+       logseg->dirty_dirfrag_nest.push_back(&dir->inode->xlist_dirty_dirfrag_nest);
+      } else {
+       dout(10) << "EMetaBlob.replay      clean nestinfo on " << *dir << dendl;
+      }
     }
     if (lump.is_new())
       dir->mark_new(logseg);