]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: avoid infinite loop in MDLog::submit_entry()
authorYan, Zheng <zheng.z.yan@intel.com>
Wed, 19 Mar 2014 03:24:53 +0000 (11:24 +0800)
committerYan, Zheng <zheng.z.yan@intel.com>
Wed, 19 Mar 2014 06:26:03 +0000 (14:26 +0800)
Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
src/mds/MDLog.cc

index cacbebfd3f66e6cf1d60b08e2dece6d62315c7a8..a71eb025622eeb8bf256a021d84e521220967843 100644 (file)
@@ -219,13 +219,14 @@ void MDLog::submit_entry(LogEvent *le, Context *c)
   uint64_t last_seg = get_last_segment_offset();
   uint64_t period = journaler->get_layout_period();
   // start a new segment if there are none or if we reach end of last segment
-  if (journaler->get_write_pos()/period != last_seg/period) {
+  if (le->get_type() == EVENT_SUBTREEMAP) {
+    // avoid infinite loop
+  } else if (journaler->get_write_pos()/period != last_seg/period) {
     dout(10) << "submit_entry also starting new segment: last = " << last_seg
             << ", cur pos = " << journaler->get_write_pos() << dendl;
     start_new_segment();
   } else if (g_conf->mds_debug_subtrees &&
-            le->get_type() != EVENT_SUBTREEMAP_TEST &&
-            le->get_type() != EVENT_SUBTREEMAP) {
+            le->get_type() != EVENT_SUBTREEMAP_TEST) {
     // debug: journal this every time to catch subtree replay bugs.
     // use a different event id so it doesn't get interpreted as a
     // LogSegment boundary on replay.