This patch introudes MIGRATE_DISCARD mode in migration.
It drops *unmapped clean cache pages* instead of migration so that
+ file = page_is_file_cache(page);
+ ttu_flags = TTU_IGNORE_ACCESS;
+retry:
+ if (!(mode & MIGRATE_DISCARD) || !file || PageDirty(page))
+ ttu_flags |= (TTU_MIGRATION | TTU_IGNORE_MLOCK);
+ else
+ discard_mode = true;
+
/* Establish migration ptes or remove ptes */
- try_to_unmap(page, TTU_MIGRATION|TTU_IGNORE_MLOCK|TTU_IGNORE_ACCESS);
+ rc = try_to_unmap(page, ttu_flags);
skip_unmap:
- if (!page_mapped(page))
- rc = move_to_new_page(newpage, page, remap_swapcache, mode);
+ if (rc == SWAP_SUCCESS) {
+ if (!discard_mode)
+ rc = move_to_new_page(newpage, page,
+ remap_swapcache, mode);
+ else {
+
+ rc = discard_page(page);
+ goto uncharge;
+ }