Skip to content

Commit 23791b0

Browse files
ryncsn1Naim
authored andcommitted
mm/mglru: consolidate common code for retrieving evictable size
Merge commonly used code for counting evictable folios in a lruvec. No behavior change. Return unsigned long instead of long as suggested [ Axel Rasmussen ] Acked-by: Yuanchu Xie <yuanchu@google.com> Reviewed-by: Barry Song <baohua@kernel.org> Reviewed-by: Chen Ridong <chenridong@huaweicloud.com> Reviewed-by: Axel Rasmussen <axelrasmussen@google.com> Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com> Signed-off-by: Kairui Song <kasong@tencent.com>
1 parent 25224e6 commit 23791b0

1 file changed

Lines changed: 14 additions & 22 deletions

File tree

mm/vmscan.c

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4102,27 +4102,33 @@ static void set_initial_priority(struct pglist_data *pgdat, struct scan_control
41024102
sc->priority = clamp(priority, DEF_PRIORITY / 2, DEF_PRIORITY);
41034103
}
41044104

4105-
static bool lruvec_is_sizable(struct lruvec *lruvec, struct scan_control *sc)
4105+
static unsigned long lruvec_evictable_size(struct lruvec *lruvec, int swappiness)
41064106
{
41074107
int gen, type, zone;
4108-
unsigned long total = 0;
4109-
int swappiness = get_swappiness(lruvec, sc);
4108+
unsigned long seq, total = 0;
41104109
struct lru_gen_folio *lrugen = &lruvec->lrugen;
4111-
struct mem_cgroup *memcg = lruvec_memcg(lruvec);
41124110
DEFINE_MAX_SEQ(lruvec);
41134111
DEFINE_MIN_SEQ(lruvec);
41144112

41154113
for_each_evictable_type(type, swappiness) {
4116-
unsigned long seq;
4117-
41184114
for (seq = min_seq[type]; seq <= max_seq; seq++) {
41194115
gen = lru_gen_from_seq(seq);
4120-
41214116
for (zone = 0; zone < MAX_NR_ZONES; zone++)
41224117
total += max(READ_ONCE(lrugen->nr_pages[gen][type][zone]), 0L);
41234118
}
41244119
}
41254120

4121+
return total;
4122+
}
4123+
4124+
static bool lruvec_is_sizable(struct lruvec *lruvec, struct scan_control *sc)
4125+
{
4126+
unsigned long total;
4127+
int swappiness = get_swappiness(lruvec, sc);
4128+
struct mem_cgroup *memcg = lruvec_memcg(lruvec);
4129+
4130+
total = lruvec_evictable_size(lruvec, swappiness);
4131+
41264132
/* whether the size is big enough to be helpful */
41274133
return mem_cgroup_online(memcg) ? (total >> sc->priority) : total;
41284134
}
@@ -4777,28 +4783,14 @@ static int evict_folios(unsigned long nr_to_scan, struct lruvec *lruvec,
47774783
static bool should_run_aging(struct lruvec *lruvec, unsigned long max_seq,
47784784
int swappiness, unsigned long *nr_to_scan)
47794785
{
4780-
int gen, type, zone;
4781-
unsigned long size = 0;
4782-
struct lru_gen_folio *lrugen = &lruvec->lrugen;
47834786
DEFINE_MIN_SEQ(lruvec);
47844787

47854788
*nr_to_scan = 0;
47864789
/* have to run aging, since eviction is not possible anymore */
47874790
if (evictable_min_seq(min_seq, swappiness) + MIN_NR_GENS > max_seq)
47884791
return true;
47894792

4790-
for_each_evictable_type(type, swappiness) {
4791-
unsigned long seq;
4792-
4793-
for (seq = min_seq[type]; seq <= max_seq; seq++) {
4794-
gen = lru_gen_from_seq(seq);
4795-
4796-
for (zone = 0; zone < MAX_NR_ZONES; zone++)
4797-
size += max(READ_ONCE(lrugen->nr_pages[gen][type][zone]), 0L);
4798-
}
4799-
}
4800-
4801-
*nr_to_scan = size;
4793+
*nr_to_scan = lruvec_evictable_size(lruvec, swappiness);
48024794
/* better to run aging even though eviction is still possible */
48034795
return evictable_min_seq(min_seq, swappiness) + MIN_NR_GENS == max_seq;
48044796
}

0 commit comments

Comments
 (0)