]> granicus.if.org Git - zfs/commitdiff
Set arc_c_min properly in userland builds
authorTim Chase <tim@chase2k.com>
Sun, 24 Jan 2016 19:11:15 +0000 (13:11 -0600)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Mon, 25 Jan 2016 18:25:10 +0000 (10:25 -0800)
Since it's set to arc_c_max / 2, it must be set after arc_c_max is set.
Also added protection against it falling below 2 * maxblocksize in
userland builds.

Signed-off-by: Tim Chase <tim@chase2k.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #4268

module/zfs/arc.c

index 88939d0d3765d9e0249bb04e777cf60be8a66f51..4d7bb8f8f2b6d14936e05dab26f84dcf195ca6ef 100644 (file)
@@ -5403,6 +5403,9 @@ arc_init(void)
        arc_need_free = 0;
 #endif
 
+       /* Set max to 1/2 of all memory */
+       arc_c_max = allmem / 2;
+
        /*
         * In userland, there's only the memory pressure that we artificially
         * create (see arc_available_memory()).  Don't let arc_c get too
@@ -5410,14 +5413,11 @@ arc_init(void)
         * arc_c, causing arc_tempreserve_space() to fail.
         */
 #ifndef        _KERNEL
-       arc_c_min = arc_c_max / 2;
+       arc_c_min = MAX(arc_c_max / 2, 2ULL << SPA_MAXBLOCKSHIFT);
 #else
        arc_c_min = 2ULL << SPA_MAXBLOCKSHIFT;
 #endif
 
-       /* Set max to 1/2 of all memory */
-       arc_c_max = allmem / 2;
-
        arc_c = arc_c_max;
        arc_p = (arc_c >> 1);