Re: [PATCH v2 2/2] mm/damon/ops-common: factor out damon_putback_folio_list()
SJ Park <[email protected]> Fri, 24 Jul 2026 07:39:16 -0700
| Newsgroups | dev.linux.lists.damon,org.kernel.vger.linux-kernel,org.kvack.linux-mm |
|---|---|
| Message-ID | <[email protected]> |
'get_maintainer.pl --nogit --nogit-fallback' suggests adding below recipients. I added them. Please consier using get_maintainer.pl from the next time. - [email protected] - [email protected] On Fri, 24 Jul 2026 14:01:35 +0800 [email protected] wrote: > From: liyouhong <[email protected]> > > The putback loop is duplicated in damon_migrate_folio_list() and on the > invalid-nid path of damon_migrate_pages(). Factor it into a small helper > for readability. No functional change. This is not a hotfix. I'd suggest sending this separately, not together with the first patch of this series. Sending hotfix together with non-hotfix when they don't really need to be applied together only makes it complicated. > > Signed-off-by: liyouhong <[email protected]> > --- > mm/damon/ops-common.c | 25 +++++++++++++------------ > 1 file changed, 13 insertions(+), 12 deletions(-) > > diff --git a/mm/damon/ops-common.c b/mm/damon/ops-common.c > index f5ded45fabd1..9a1e8aec5444 100644 > --- a/mm/damon/ops-common.c > +++ b/mm/damon/ops-common.c > @@ -331,12 +331,22 @@ static unsigned int __damon_migrate_folio_list( > return nr_succeeded; > } > > +static void damon_putback_folio_list(struct list_head *folio_list) > +{ > + struct folio *folio; > + > + while (!list_empty(folio_list)) { > + folio = lru_to_folio(folio_list); > + list_del(&folio->lru); > + folio_putback_lru(folio); > + } > +} > + > static unsigned int damon_migrate_folio_list(struct list_head *folio_list, > struct pglist_data *pgdat, > int target_nid) > { > unsigned int nr_migrated = 0; > - struct folio *folio; > LIST_HEAD(ret_folios); > LIST_HEAD(migrate_folios); > > @@ -374,11 +384,7 @@ static unsigned int damon_migrate_folio_list(struct list_head *folio_list, > > list_splice(&ret_folios, folio_list); > > - while (!list_empty(folio_list)) { > - folio = lru_to_folio(folio_list); > - list_del(&folio->lru); > - folio_putback_lru(folio); > - } > + damon_putback_folio_list(folio_list); > > return nr_migrated; > } > @@ -395,12 +401,7 @@ unsigned long damon_migrate_pages(struct list_head *folio_list, int target_nid) > > if (target_nid < 0 || target_nid >= MAX_NUMNODES || > !node_state(target_nid, N_MEMORY)) { > - while (!list_empty(folio_list)) { > - struct folio *folio = lru_to_folio(folio_list); > - > - list_del(&folio->lru); > - folio_putback_lru(folio); > - } > + damon_putback_folio_list(folio_list); > return nr_migrated; > } Looks better. But, how about further simplifying it by moving the folios putback from damon_migrate_pages(), and doing that from damon_migrate_pages()? damon_migrate_pages() would do the putback always before returning, and the taregt_nid path will 'goto' the path. E.g., --- a/mm/damon/ops-common.c +++ b/mm/damon/ops-common.c @@ -391,15 +391,8 @@ unsigned long damon_migrate_pages(struct list_head *folio_list, int target_nid) return nr_migrated; if (target_nid < 0 || target_nid >= MAX_NUMNODES || - !node_state(target_nid, N_MEMORY)) { - while (!list_empty(folio_list)) { - struct folio *folio = lru_to_folio(folio_list); - - list_del(&folio->lru); - folio_putback_lru(folio); - } - return nr_migrated; - } + !node_state(target_nid, N_MEMORY)) + goto out; noreclaim_flag = memalloc_noreclaim_save(); @@ -424,6 +417,14 @@ unsigned long damon_migrate_pages(struct list_head *folio_list, int target_nid) memalloc_noreclaim_restore(noreclaim_flag); +out: + + while (!list_empty(folio_list)) { + struct folio *folio = lru_to_folio(folio_list); + + list_del(&folio->lru); + folio_putback_lru(folio); + } return nr_migrated; } This could be applied to the first patch. And this patch can simply remove the redundanty putback. > > -- > 2.25.1 [1] https://lore.kernel.org/[email protected] Thanks, SJ