]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: Properly update dirty dir fragstat during log replay
authorYan, Zheng <zheng.z.yan@intel.com>
Tue, 2 Oct 2012 08:55:49 +0000 (16:55 +0800)
committerSage Weil <sage@inktank.com>
Tue, 2 Oct 2012 18:24:49 +0000 (11:24 -0700)
Dirty dir fragstat is managed by filelock instead of nestlock.

Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
src/mds/journal.cc

index 38f8c0e7821970b52364724efc4b7546eb765c36..0de3f397f46bb2bb55039202621a293e44fc3831 100644 (file)
@@ -488,14 +488,20 @@ void EMetaBlob::replay(MDS *mds, LogSegment *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)) {
+      if (!(dir->fnode.rstat == dir->fnode.accounted_rstat)) {
        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->item_dirty_dirfrag_nest);
       } else {
        dout(10) << "EMetaBlob.replay      clean nestinfo on " << *dir << dendl;
       }
+      if (!(dir->fnode.fragstat == dir->fnode.accounted_fragstat)) {
+       dout(10) << "EMetaBlob.replay      dirty fragstat on " << *dir << dendl;
+       mds->locker->mark_updated_scatterlock(&dir->inode->filelock);
+       logseg->dirty_dirfrag_dir.push_back(&dir->inode->item_dirty_dirfrag_dir);
+      } else {
+       dout(10) << "EMetaBlob.replay      clean fragstat on " << *dir << dendl;
+      }
     }
     if (lump.is_new())
       dir->mark_new(logseg);