From 935434ef01fc067f3b4bc26be6378f8f1d89734a Mon Sep 17 00:00:00 2001 From: Brian Behlendorf Date: Tue, 13 Oct 2015 09:17:01 -0700 Subject: [PATCH] Fix 'arc_c < arc_c_min' panic Strictly enforce keeping 'arc_c >= arc_c_min'. The ASSERTs are left in place to catch this in a debug build but logic has been added to gracefully handle in a production build. Signed-off-by: Brian Behlendorf Issue #3904 --- module/zfs/arc.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/module/zfs/arc.c b/module/zfs/arc.c index b759e6483..fa1434e16 100644 --- a/module/zfs/arc.c +++ b/module/zfs/arc.c @@ -3757,7 +3757,8 @@ arc_adapt(int bytes, arc_state_t *state) * If we're within (2 * maxblocksize) bytes of the target * cache size, increment the target cache size */ - VERIFY3U(arc_c, >=, 2ULL << SPA_MAXBLOCKSHIFT); + ASSERT3U(arc_c, >=, 2ULL << SPA_MAXBLOCKSHIFT); + arc_c = MAX(arc_c, 2ULL << SPA_MAXBLOCKSHIFT); if (arc_size >= arc_c - (2ULL << SPA_MAXBLOCKSHIFT)) { atomic_add_64(&arc_c, (int64_t)bytes); if (arc_c > arc_c_max) -- 2.40.0