mirror of
https://github.com/torvalds/linux.git
synced 2024-11-25 21:51:40 +00:00
migrate_pages: move migrate_folio_unmap()
Just move the position of the functions. There's no any functionality change. This is to make it easier to review the next patch via putting code near its position in the next patch. Link: https://lkml.kernel.org/r/20230213123444.155149-7-ying.huang@intel.com Signed-off-by: "Huang, Ying" <ying.huang@intel.com> Reviewed-by: Zi Yan <ziy@nvidia.com> Cc: Yang Shi <shy828301@gmail.com> Cc: Baolin Wang <baolin.wang@linux.alibaba.com> Cc: Oscar Salvador <osalvador@suse.de> Cc: Matthew Wilcox <willy@infradead.org> Cc: Bharata B Rao <bharata@amd.com> Cc: Alistair Popple <apopple@nvidia.com> Cc: Xin Hao <xhao@linux.alibaba.com> Cc: Minchan Kim <minchan@kernel.org> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Hyeonggon Yoo <42.hyeyoo@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
5dfab109d5
commit
80562ba0d8
100
mm/migrate.c
100
mm/migrate.c
@ -1236,6 +1236,56 @@ out:
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* Obtain the lock on page, remove all ptes. */
|
||||
static int migrate_folio_unmap(new_page_t get_new_page, free_page_t put_new_page,
|
||||
unsigned long private, struct folio *src,
|
||||
struct folio **dstp, int force, bool avoid_force_lock,
|
||||
enum migrate_mode mode, enum migrate_reason reason,
|
||||
struct list_head *ret)
|
||||
{
|
||||
struct folio *dst;
|
||||
int rc = MIGRATEPAGE_UNMAP;
|
||||
struct page *newpage = NULL;
|
||||
|
||||
if (!thp_migration_supported() && folio_test_transhuge(src))
|
||||
return -ENOSYS;
|
||||
|
||||
if (folio_ref_count(src) == 1) {
|
||||
/* Folio was freed from under us. So we are done. */
|
||||
folio_clear_active(src);
|
||||
folio_clear_unevictable(src);
|
||||
/* free_pages_prepare() will clear PG_isolated. */
|
||||
list_del(&src->lru);
|
||||
migrate_folio_done(src, reason);
|
||||
return MIGRATEPAGE_SUCCESS;
|
||||
}
|
||||
|
||||
newpage = get_new_page(&src->page, private);
|
||||
if (!newpage)
|
||||
return -ENOMEM;
|
||||
dst = page_folio(newpage);
|
||||
*dstp = dst;
|
||||
|
||||
dst->private = NULL;
|
||||
rc = __migrate_folio_unmap(src, dst, force, avoid_force_lock, mode);
|
||||
if (rc == MIGRATEPAGE_UNMAP)
|
||||
return rc;
|
||||
|
||||
/*
|
||||
* A folio that has not been unmapped will be restored to
|
||||
* right list unless we want to retry.
|
||||
*/
|
||||
if (rc != -EAGAIN && rc != -EDEADLOCK)
|
||||
list_move_tail(&src->lru, ret);
|
||||
|
||||
if (put_new_page)
|
||||
put_new_page(&dst->page, private);
|
||||
else
|
||||
folio_put(dst);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int __migrate_folio_move(struct folio *src, struct folio *dst,
|
||||
enum migrate_mode mode)
|
||||
{
|
||||
@ -1296,56 +1346,6 @@ out_unlock_both:
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* Obtain the lock on page, remove all ptes. */
|
||||
static int migrate_folio_unmap(new_page_t get_new_page, free_page_t put_new_page,
|
||||
unsigned long private, struct folio *src,
|
||||
struct folio **dstp, int force, bool avoid_force_lock,
|
||||
enum migrate_mode mode, enum migrate_reason reason,
|
||||
struct list_head *ret)
|
||||
{
|
||||
struct folio *dst;
|
||||
int rc = MIGRATEPAGE_UNMAP;
|
||||
struct page *newpage = NULL;
|
||||
|
||||
if (!thp_migration_supported() && folio_test_transhuge(src))
|
||||
return -ENOSYS;
|
||||
|
||||
if (folio_ref_count(src) == 1) {
|
||||
/* Folio was freed from under us. So we are done. */
|
||||
folio_clear_active(src);
|
||||
folio_clear_unevictable(src);
|
||||
/* free_pages_prepare() will clear PG_isolated. */
|
||||
list_del(&src->lru);
|
||||
migrate_folio_done(src, reason);
|
||||
return MIGRATEPAGE_SUCCESS;
|
||||
}
|
||||
|
||||
newpage = get_new_page(&src->page, private);
|
||||
if (!newpage)
|
||||
return -ENOMEM;
|
||||
dst = page_folio(newpage);
|
||||
*dstp = dst;
|
||||
|
||||
dst->private = NULL;
|
||||
rc = __migrate_folio_unmap(src, dst, force, avoid_force_lock, mode);
|
||||
if (rc == MIGRATEPAGE_UNMAP)
|
||||
return rc;
|
||||
|
||||
/*
|
||||
* A folio that has not been unmapped will be restored to
|
||||
* right list unless we want to retry.
|
||||
*/
|
||||
if (rc != -EAGAIN && rc != -EDEADLOCK)
|
||||
list_move_tail(&src->lru, ret);
|
||||
|
||||
if (put_new_page)
|
||||
put_new_page(&dst->page, private);
|
||||
else
|
||||
folio_put(dst);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* Migrate the folio to the newly allocated folio in dst. */
|
||||
static int migrate_folio_move(free_page_t put_new_page, unsigned long private,
|
||||
struct folio *src, struct folio *dst,
|
||||
|
Loading…
Reference in New Issue
Block a user