From 75f60f37767997eccb799e427bb1a4e79b275921 Mon Sep 17 00:00:00 2001 From: Mark Nelson Date: Wed, 24 Apr 2019 10:08:22 -0500 Subject: [PATCH] common/PriorityCache: fix over-aggressive assert when mem limited Fixes: https://tracker.ceph.com/issues/39437 Signed-off-by: Mark Nelson --- src/common/PriorityCache.cc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/common/PriorityCache.cc b/src/common/PriorityCache.cc index 9ce6905a8d8..a12b6807462 100644 --- a/src/common/PriorityCache.cc +++ b/src/common/PriorityCache.cc @@ -262,7 +262,13 @@ namespace PriorityCache // Each cache is going to get a little extra from get_chunk, so shrink the // available memory here to compensate. mem_avail -= get_chunk(1, tuned_mem) * caches.size(); - ceph_assert(mem_avail >= 0); + + if (mem_avail < 0) { + // There's so little memory available that just assigning a chunk per + // cache pushes us over the limit. Set mem_avail to 0 and continue to + // ensure each priority's byte counts are zeroed in balance_priority. + mem_avail = 0; + } // Assign memory for each priority level for (int i = 0; i < Priority::LAST+1; i++) {