aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorshodanshok <g.danti@assyoma.it>2022-11-11 18:41:36 +0000
committerGitHub <noreply@github.com>2022-11-11 18:41:36 +0000
commitb445b25b273d263f032fadd717e5731185b74bf5 (patch)
treef7236fbde27ed097093d98706b4d52b7b957d166
parent9f4ede63d23be4f43ba8dd0ca42c6a773a8eaa8d (diff)
-rw-r--r--module/zfs/arc.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/module/zfs/arc.c b/module/zfs/arc.c
index 1f97631f974f..f51f427c1bfd 100644
--- a/module/zfs/arc.c
+++ b/module/zfs/arc.c
@@ -5173,7 +5173,7 @@ arc_adapt(int bytes, arc_state_t *state)
atomic_add_64(&arc_c, (int64_t)bytes);
if (arc_c > arc_c_max)
arc_c = arc_c_max;
- else if (state == arc_anon)
+ else if (state == arc_anon && arc_p < arc_c >> 1)
atomic_add_64(&arc_p, (int64_t)bytes);
if (arc_p > arc_c)
arc_p = arc_c;
@@ -5386,7 +5386,8 @@ arc_get_data_impl(arc_buf_hdr_t *hdr, uint64_t size, const void *tag,
if (aggsum_upper_bound(&arc_sums.arcstat_size) < arc_c &&
hdr->b_l1hdr.b_state == arc_anon &&
(zfs_refcount_count(&arc_anon->arcs_size) +
- zfs_refcount_count(&arc_mru->arcs_size) > arc_p))
+ zfs_refcount_count(&arc_mru->arcs_size) > arc_p &&
+ arc_p < arc_c >> 1))
arc_p = MIN(arc_c, arc_p + size);
}
}