Messages in this thread | | | Date | Thu, 15 Dec 2011 22:32:51 -0500 | From | Rik van Riel <> | Subject | Re: [PATCH 05/11] mm: compaction: Determine if dirty pages can be migrated without blocking within ->migratepage |
| |
On 12/14/2011 10:41 AM, Mel Gorman wrote: > Asynchronous compaction is used when allocating transparent hugepages > to avoid blocking for long periods of time. Due to reports of > stalling, there was a debate on disabling synchronous compaction > but this severely impacted allocation success rates. Part of the > reason was that many dirty pages are skipped in asynchronous compaction > by the following check; > > if (PageDirty(page)&& !sync&& > mapping->a_ops->migratepage != migrate_page) > rc = -EBUSY; > > This skips over all mapping aops using buffer_migrate_page() > even though it is possible to migrate some of these pages without > blocking. This patch updates the ->migratepage callback with a "sync" > parameter. It is the responsibility of the callback to fail gracefully > if migration would block. > > Signed-off-by: Mel Gorman<mgorman@suse.de>
Reviewed-by: Rik van Riel <riel@redhat.com>
-- All rights reversed
| |