Skip to content

Commit

Permalink
Stop double reclaiming or not reclaiming at all
Browse files Browse the repository at this point in the history
Move arcstat_need_free increment from all direct calls to when
arc_reclaim_lock is busy and we exit wihout doing anything. Data will
be reclaimed in reclaim thread. The previous location meant that we
both reclaim the memory in this thread, and also schedule the same
amount of memory for reclaim in arc_reclaim, effectively doubling the
requested reclaim.

AKAMAI: zfs: CR 3695072
Reviewed-by: Tim Chase <tim@chase2k.com>
Reviewed-by: Richard Yao <ryao@gentoo.org>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Debabrata Banerjee <dbanerje@akamai.com>
Issue #6035
  • Loading branch information
dbavatar authored and behlendorf committed May 2, 2017
1 parent 30fffb9 commit b855550
Showing 1 changed file with 3 additions and 2 deletions.
5 changes: 3 additions & 2 deletions module/zfs/arc.c
Original file line number Diff line number Diff line change
Expand Up @@ -4414,8 +4414,10 @@ __arc_shrinker_func(struct shrinker *shrink, struct shrink_control *sc)
return (SHRINK_STOP);

/* Reclaim in progress */
if (mutex_tryenter(&arc_reclaim_lock) == 0)
if (mutex_tryenter(&arc_reclaim_lock) == 0) {
ARCSTAT_INCR(arcstat_need_free, ptob(sc->nr_to_scan));
return (SHRINK_STOP);
}

mutex_exit(&arc_reclaim_lock);

Expand Down Expand Up @@ -4453,7 +4455,6 @@ __arc_shrinker_func(struct shrinker *shrink, struct shrink_control *sc)
ARCSTAT_BUMP(arcstat_memory_indirect_count);
} else {
arc_no_grow = B_TRUE;
ARCSTAT_INCR(arcstat_need_free, ptob(sc->nr_to_scan));
ARCSTAT_BUMP(arcstat_memory_direct_count);
}

Expand Down

0 comments on commit b855550

Please sign in to comment.