]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: properly mark dirfrag dirty
authorYan, Zheng <zheng.z.yan@intel.com>
Thu, 6 Dec 2012 01:28:46 +0000 (09:28 +0800)
committerSage Weil <sage@inktank.com>
Mon, 24 Dec 2012 04:01:11 +0000 (20:01 -0800)
If predirty_journal_parents() does not propagate changes in dir's
fragstat into corresponding inode's dirstat, it should mark the
inode as dirfrag dirty. This happens when we modify dir fragments
that are auth subtree roots.

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

index c345b11e448e9ba6ff3f3f00b4b73fc08b2741e8..09d9b7cbc701b7b2118c14d3f71ba866360bf7ba 100644 (file)
@@ -1993,6 +1993,11 @@ void MDCache::predirty_journal_parents(Mutation *mut, EMetaBlob *blob,
       mds->locker->mark_updated_scatterlock(&pin->nestlock);
       mut->ls->dirty_dirfrag_nest.push_back(&pin->item_dirty_dirfrag_nest);
       mut->add_updated_lock(&pin->nestlock);
+      if (do_parent_mtime || linkunlink) {
+       mds->locker->mark_updated_scatterlock(&pin->filelock);
+       mut->ls->dirty_dirfrag_dir.push_back(&pin->item_dirty_dirfrag_dir);
+       mut->add_updated_lock(&pin->filelock);
+      }
       break;
     }
     if (!mut->wrlocks.count(&pin->versionlock))