On Mon, 15 Jan 2024 13:52:49 +0900 Honggyu Kim <[email protected]> wrote:
> Since we will introduce reclaim_pages like functions such as > demote_pages and promote_pages, the most of the code can be shared. > > This is a preparation patch that introduces reclaim_or_migrate_folios() > to cover all the logics, but it provides a handler for the different > actions. > > No functional changes applied. > > Signed-off-by: Honggyu Kim <[email protected]> > --- > mm/vmscan.c | 18 ++++++++++++------ > 1 file changed, 12 insertions(+), 6 deletions(-) > > diff --git a/mm/vmscan.c b/mm/vmscan.c > index bba207f41b14..7ca2396ccc3b 100644 > --- a/mm/vmscan.c > +++ b/mm/vmscan.c > @@ -2107,15 +2107,16 @@ static unsigned int reclaim_folio_list(struct > list_head *folio_list, > return nr_reclaimed; > } > > -unsigned long reclaim_pages(struct list_head *folio_list) > +static unsigned long reclaim_or_migrate_folios(struct list_head *folio_list, > + unsigned int (*handler)(struct list_head *, struct pglist_data > *)) I'm not very sure if extending this function for general migration is the right approach, since we have dedicated functions for the migration. I'd like to hear others' opinions. > { > int nid; > - unsigned int nr_reclaimed = 0; > + unsigned int nr_folios = 0; > LIST_HEAD(node_folio_list); > unsigned int noreclaim_flag; > > if (list_empty(folio_list)) > - return nr_reclaimed; > + return nr_folios; > > noreclaim_flag = memalloc_noreclaim_save(); > > @@ -2129,15 +2130,20 @@ unsigned long reclaim_pages(struct list_head > *folio_list) > continue; > } > > - nr_reclaimed += reclaim_folio_list(&node_folio_list, > NODE_DATA(nid)); > + nr_folios += handler(&node_folio_list, NODE_DATA(nid)); > nid = folio_nid(lru_to_folio(folio_list)); > } while (!list_empty(folio_list)); > > - nr_reclaimed += reclaim_folio_list(&node_folio_list, NODE_DATA(nid)); > + nr_folios += handler(&node_folio_list, NODE_DATA(nid)); > > memalloc_noreclaim_restore(noreclaim_flag); > > - return nr_reclaimed; > + return nr_folios; > +} > + > +unsigned long reclaim_pages(struct list_head *folio_list) > +{ > + return reclaim_or_migrate_folios(folio_list, reclaim_folio_list); > } > > static unsigned long shrink_list(enum lru_list lru, unsigned long nr_to_scan, > -- > 2.34.1

