Loading mm/migrate.c +10 −11 Original line number Diff line number Diff line Loading @@ -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, Loading @@ -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; } Loading @@ -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); } /* Loading Loading
mm/migrate.c +10 −11 Original line number Diff line number Diff line Loading @@ -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, Loading @@ -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; } Loading @@ -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); } /* Loading