Message ID | 20250417060630.197278-2-shivankg@amd.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | JFS: Implement migrate_folio for jfs_metapage_aops | expand |
On 17.04.25 08:06, Shivank Garg wrote: > Export folio_expected_refs() to allow filesystem-specific migration > handlers like JFS metapage_migrate_folio to properly verify reference > counts before migration. > > Signed-off-by: Shivank Garg <shivankg@amd.com> > --- > include/linux/migrate.h | 1 + > mm/migrate.c | 3 ++- > 2 files changed, 3 insertions(+), 1 deletion(-) > > diff --git a/include/linux/migrate.h b/include/linux/migrate.h > index aaa2114498d6..cb31c5b1eb6a 100644 > --- a/include/linux/migrate.h > +++ b/include/linux/migrate.h > @@ -60,6 +60,7 @@ struct movable_operations { > /* Defined in mm/debug.c: */ > extern const char *migrate_reason_names[MR_TYPES]; > > +int folio_expected_refs(struct address_space *mapping, struct folio *folio); > #ifdef CONFIG_MIGRATION > > void putback_movable_pages(struct list_head *l); > diff --git a/mm/migrate.c b/mm/migrate.c > index 6e2488e5dbe4..0f01b8a87dec 100644 > --- a/mm/migrate.c > +++ b/mm/migrate.c > @@ -445,7 +445,7 @@ void pmd_migration_entry_wait(struct mm_struct *mm, pmd_t *pmd) > } > #endif > > -static int folio_expected_refs(struct address_space *mapping, > +int folio_expected_refs(struct address_space *mapping, > struct folio *folio) > { > int refs = 1; > @@ -458,6 +458,7 @@ static int folio_expected_refs(struct address_space *mapping, > > return refs; > } > +EXPORT_SYMBOL_GPL(folio_expected_refs); > > /* > * Replace the folio in the mapping. Can we make that an inline function instead, and add some documentation? This function is only suitable if we know the folio is unmapped from page tables (no references from page table mappings: !folio_mapped()). So when exporting this function we either a) Need a clearer name b) Should generalize it to consider folio_mapcount() etc, and lookup the mapping from the folio. For your use case, a) might be easier. Maybe call it something like "folio_migration_expected_refs" ?
diff --git a/include/linux/migrate.h b/include/linux/migrate.h index aaa2114498d6..cb31c5b1eb6a 100644 --- a/include/linux/migrate.h +++ b/include/linux/migrate.h @@ -60,6 +60,7 @@ struct movable_operations { /* Defined in mm/debug.c: */ extern const char *migrate_reason_names[MR_TYPES]; +int folio_expected_refs(struct address_space *mapping, struct folio *folio); #ifdef CONFIG_MIGRATION void putback_movable_pages(struct list_head *l); diff --git a/mm/migrate.c b/mm/migrate.c index 6e2488e5dbe4..0f01b8a87dec 100644 --- a/mm/migrate.c +++ b/mm/migrate.c @@ -445,7 +445,7 @@ void pmd_migration_entry_wait(struct mm_struct *mm, pmd_t *pmd) } #endif -static int folio_expected_refs(struct address_space *mapping, +int folio_expected_refs(struct address_space *mapping, struct folio *folio) { int refs = 1; @@ -458,6 +458,7 @@ static int folio_expected_refs(struct address_space *mapping, return refs; } +EXPORT_SYMBOL_GPL(folio_expected_refs); /* * Replace the folio in the mapping.
Export folio_expected_refs() to allow filesystem-specific migration handlers like JFS metapage_migrate_folio to properly verify reference counts before migration. Signed-off-by: Shivank Garg <shivankg@amd.com> --- include/linux/migrate.h | 1 + mm/migrate.c | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-)