On 2024/4/17 9:43, Kefeng Wang wrote: > > > On 2024/4/16 20:40, Miaohe Lin wrote: >> On 2024/3/21 11:27, Kefeng Wang wrote: >>> The migrate_folio_extra() only called in migrate.c now, convert it >>> a static function and take a new src_private argument which could >>> be shared by migrate_folio() and filemap_migrate_folio() to simplify >>> code a bit. >>> >>> Signed-off-by: Kefeng Wang <wangkefeng.wang@xxxxxxxxxx> >>> --- >>> include/linux/migrate.h | 2 -- >>> mm/migrate.c | 33 +++++++++++---------------------- >>> 2 files changed, 11 insertions(+), 24 deletions(-) >>> >>> diff --git a/include/linux/migrate.h b/include/linux/migrate.h >>> index 2ce13e8a309b..517f70b70620 100644 >>> --- a/include/linux/migrate.h >>> +++ b/include/linux/migrate.h >>> @@ -63,8 +63,6 @@ extern const char *migrate_reason_names[MR_TYPES]; >>> #ifdef CONFIG_MIGRATION >>> void putback_movable_pages(struct list_head *l); >>> -int migrate_folio_extra(struct address_space *mapping, struct folio *dst, >>> - struct folio *src, enum migrate_mode mode, int extra_count); >>> int migrate_folio(struct address_space *mapping, struct folio *dst, >>> struct folio *src, enum migrate_mode mode); >>> int migrate_pages(struct list_head *l, new_folio_t new, free_folio_t free, >>> diff --git a/mm/migrate.c b/mm/migrate.c >>> index cb4cbaa42a35..c006b0b44013 100644 >>> --- a/mm/migrate.c >>> +++ b/mm/migrate.c >>> @@ -658,18 +658,19 @@ EXPORT_SYMBOL(folio_migrate_copy); >>> * Migration functions >>> ***********************************************************/ >>> -int migrate_folio_extra(struct address_space *mapping, struct folio *dst, >>> - struct folio *src, enum migrate_mode mode, int extra_count) >>> +static int __migrate_folio(struct address_space *mapping, struct folio *dst, >>> + struct folio *src, void *src_private, >>> + enum migrate_mode mode) >>> { >>> int rc; >>> - BUG_ON(folio_test_writeback(src)); /* Writeback must be complete */ >>> - >>> - rc = folio_migrate_mapping(mapping, dst, src, extra_count); >>> - >>> + rc = folio_migrate_mapping(mapping, dst, src, 0); >>> if (rc != MIGRATEPAGE_SUCCESS) >>> return rc; >>> + if (src_private) >> >> src_private seems unneeded. It can be replaced with folio_get_private(src)? >> > > __migrate_folio() is used by migrate_folio() and filemap_migrate_folio(), > but migrate_folio() is for LRU folio, when swapcache folio, the > folio->private is handled from folio_migrate_mapping(), we should not > try to call folio_detach_private/folio_attach_private(). I see. Swapcache folio will use private field while without using PagePrivate/PagePrivate2. We can't handle this case if src_private is removed. Thanks. . > >> Thanks. >> . > .