Re: [PATCH v2 2/2] mm/damon/ops-common: factor out damon_putback_folio_list()
SJ Park <[email protected]> Fri, 24 Jul 2026 07:56:19 -0700
| Newsgroups | dev.linux.lists.damon,org.kernel.vger.linux-kernel,org.kvack.linux-mm |
|---|---|
| Message-ID | <[email protected]> |
On Fri, 24 Jul 2026 07:39:24 -0700 SJ Park <[email protected]> wrote: > '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; I forgot mentioning this breaks build, as Sashiko also pointed [1] out. This patch cannot be applied as-is. [1] https://lore.kernel.org/[email protected] Thanks, SJ > > 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 >