]> granicus.if.org Git - zfs/commitdiff
Fix 'arc_c < arc_c_min' panic
authorBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 13 Oct 2015 16:17:01 +0000 (09:17 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 13 Oct 2015 16:23:35 +0000 (09:23 -0700)
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 <behlendorf1@llnl.gov>
Issue #3904

module/zfs/arc.c

index b759e6483d53a26beecae94286cad6e72d7dea2a..fa1434e168638b5adfa0ed922ca9f88aa73f5e39 100644 (file)
@@ -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)