From c8bdf1b761cbff52d1b865ea90e3afbf56623491 Mon Sep 17 00:00:00 2001 From: John Spray Date: Wed, 22 Jul 2015 21:57:33 +0100 Subject: [PATCH] mds: fix crash while stopping rank trim() was broken in: 8a91daae mds: fix mds crash when mds_max_log_events smaller When doing a final trim in shutdown we need to trim everything, not just all but the last segment. The previous change's intent was to prevent badness when mds_log_max_events was too small: accomplish the same thing here by clamping the value to something sane. Fixes: #12355 Signed-off-by: John Spray --- src/mds/MDLog.cc | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/mds/MDLog.cc b/src/mds/MDLog.cc index 2e58369929e..63bc864647c 100644 --- a/src/mds/MDLog.cc +++ b/src/mds/MDLog.cc @@ -552,6 +552,11 @@ void MDLog::trim(int m) return; } + // Clamp max_events to not be smaller than events per segment + if (max_events > 0 && max_events <= g_conf->mds_log_events_per_segment) { + max_events = g_conf->mds_log_events_per_segment + 1; + } + submit_mutex.Lock(); // trim! @@ -572,7 +577,7 @@ void MDLog::trim(int m) stop += 2.0; map::iterator p = segments.begin(); - while (segments.size() > 1 && p != segments.end() && + while (p != segments.end() && ((max_events >= 0 && num_events - expiring_events - expired_events > max_events) || (segments.size() - expiring_segments.size() - expired_segments.size() > max_segments))) { -- 2.47.3