mm/migrate: Convert writeout() to take a folio

Use a folio throughout this function.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
Matthew Wilcox (Oracle) 2022-06-06 09:41:03 -04:00
parent 8faa8ef5dd
commit 2be7fa10c0

View file

@ -761,11 +761,10 @@ int buffer_migrate_page_norefs(struct address_space *mapping,
#endif
/*
* Writeback a page to clean the dirty state
* Writeback a folio to clean the dirty state
*/
static int writeout(struct address_space *mapping, struct page *page)
static int writeout(struct address_space *mapping, struct folio *folio)
{
struct folio *folio = page_folio(page);
struct writeback_control wbc = {
.sync_mode = WB_SYNC_NONE,
.nr_to_write = 1,
@ -779,25 +778,25 @@ static int writeout(struct address_space *mapping, struct page *page)
/* No write method for the address space */
return -EINVAL;
if (!clear_page_dirty_for_io(page))
if (!folio_clear_dirty_for_io(folio))
/* Someone else already triggered a write */
return -EAGAIN;
/*
* A dirty page may imply that the underlying filesystem has
* the page on some queue. So the page must be clean for
* migration. Writeout may mean we loose the lock and the
* page state is no longer what we checked for earlier.
* A dirty folio may imply that the underlying filesystem has
* the folio on some queue. So the folio must be clean for
* migration. Writeout may mean we lose the lock and the
* folio state is no longer what we checked for earlier.
* At this point we know that the migration attempt cannot
* be successful.
*/
remove_migration_ptes(folio, folio, false);
rc = mapping->a_ops->writepage(page, &wbc);
rc = mapping->a_ops->writepage(&folio->page, &wbc);
if (rc != AOP_WRITEPAGE_ACTIVATE)
/* unlocked. Relock */
lock_page(page);
folio_lock(folio);
return (rc < 0) ? -EIO : -EAGAIN;
}
@ -817,7 +816,7 @@ static int fallback_migrate_folio(struct address_space *mapping,
default:
return -EBUSY;
}
return writeout(mapping, &src->page);
return writeout(mapping, src);
}
/*