summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Chase <[email protected]>2016-01-24 13:11:15 -0600
committerBrian Behlendorf <[email protected]>2016-01-25 10:25:10 -0800
commit0a1f8cd9994427286c4663cccdeeae0de10cea19 (patch)
tree937e36f0ecad1300177b9346a996e4ce7ef09cf8
parent1b8951b319b7bcddfe0cc2408b7717f9ce3d758b (diff)
Set arc_c_min properly in userland builds
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 <[email protected]> Signed-off-by: Brian Behlendorf <[email protected]> Closes #4268
-rw-r--r--module/zfs/arc.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/module/zfs/arc.c b/module/zfs/arc.c
index 88939d0d3..4d7bb8f8f 100644
--- a/module/zfs/arc.c
+++ b/module/zfs/arc.c
@@ -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);