Message ID | 20190610111252.239156-3-minchan@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Introduce MADV_COLD and MADV_PAGEOUT | expand |
On Mon 10-06-19 20:12:49, Minchan Kim wrote: > The local variable references in shrink_page_list is PAGEREF_RECLAIM_CLEAN > as default. It is for preventing to reclaim dirty pages when CMA try to > migrate pages. Strictly speaking, we don't need it because CMA didn't allow > to write out by .may_writepage = 0 in reclaim_clean_pages_from_list. > > Moreover, it has a problem to prevent anonymous pages's swap out even > though force_reclaim = true in shrink_page_list on upcoming patch. > So this patch makes references's default value to PAGEREF_RECLAIM and > rename force_reclaim with ignore_references to make it more clear. > > This is a preparatory work for next patch. > > * RFCv1 > * use ignore_referecnes as parameter name - hannes > > Acked-by: Johannes Weiner <hannes@cmpxchg.org> > Signed-off-by: Minchan Kim <minchan@kernel.org> The code path is quite tricky to follow but the patch looks OK to me. Acked-by: Michal Hocko <mhocko@suse.com> > --- > mm/vmscan.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/mm/vmscan.c b/mm/vmscan.c > index 84dcb651d05c..0973a46a0472 100644 > --- a/mm/vmscan.c > +++ b/mm/vmscan.c > @@ -1102,7 +1102,7 @@ static unsigned long shrink_page_list(struct list_head *page_list, > struct scan_control *sc, > enum ttu_flags ttu_flags, > struct reclaim_stat *stat, > - bool force_reclaim) > + bool ignore_references) > { > LIST_HEAD(ret_pages); > LIST_HEAD(free_pages); > @@ -1116,7 +1116,7 @@ static unsigned long shrink_page_list(struct list_head *page_list, > struct address_space *mapping; > struct page *page; > int may_enter_fs; > - enum page_references references = PAGEREF_RECLAIM_CLEAN; > + enum page_references references = PAGEREF_RECLAIM; > bool dirty, writeback; > unsigned int nr_pages; > > @@ -1247,7 +1247,7 @@ static unsigned long shrink_page_list(struct list_head *page_list, > } > } > > - if (!force_reclaim) > + if (!ignore_references) > references = page_check_references(page, sc); > > switch (references) { > -- > 2.22.0.rc2.383.gf4fbbf30c2-goog
diff --git a/mm/vmscan.c b/mm/vmscan.c index 84dcb651d05c..0973a46a0472 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -1102,7 +1102,7 @@ static unsigned long shrink_page_list(struct list_head *page_list, struct scan_control *sc, enum ttu_flags ttu_flags, struct reclaim_stat *stat, - bool force_reclaim) + bool ignore_references) { LIST_HEAD(ret_pages); LIST_HEAD(free_pages); @@ -1116,7 +1116,7 @@ static unsigned long shrink_page_list(struct list_head *page_list, struct address_space *mapping; struct page *page; int may_enter_fs; - enum page_references references = PAGEREF_RECLAIM_CLEAN; + enum page_references references = PAGEREF_RECLAIM; bool dirty, writeback; unsigned int nr_pages; @@ -1247,7 +1247,7 @@ static unsigned long shrink_page_list(struct list_head *page_list, } } - if (!force_reclaim) + if (!ignore_references) references = page_check_references(page, sc); switch (references) {