| From dhobsong@igel.co.jp Mon Oct 29 00:53:40 2012 |
| From: Damian Hobson-Garcia <dhobsong@igel.co.jp> |
| Date: Mon, 29 Oct 2012 16:51:02 +0900 |
| Subject: [PATCH v2 45/58] mm: clean up __count_immobile_pages() |
| To: greg@kroah.com, laurent.pinchart@ideasonboard.com, horms@verge.net.au |
| Cc: ltsi-dev@lists.linuxfoundation.org, dhobsong@igel.co.jp |
| Message-ID: <1351497075-32717-46-git-send-email-dhobsong@igel.co.jp> |
| |
| |
| From: Minchan Kim <minchan@kernel.org> |
| |
| The __count_immobile_pages() naming is rather awkward. Choose a more |
| clear name and add a comment. |
| |
| Signed-off-by: Minchan Kim <minchan@kernel.org> |
| Cc: Andrea Arcangeli <aarcange@redhat.com> |
| Cc: Mel Gorman <mgorman@suse.de> |
| Cc: Michal Hocko <mhocko@suse.cz> |
| Acked-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> |
| Cc: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
| (cherry picked from commit 80934513b230bfcf70265f2ef0fdae89fb391633) |
| |
| Signed-off-by: Damian Hobson-Garcia <dhobsong@igel.co.jp> |
| --- |
| mm/page_alloc.c | 34 ++++++++++++++++++---------------- |
| 1 file changed, 18 insertions(+), 16 deletions(-) |
| |
| --- a/mm/page_alloc.c |
| +++ b/mm/page_alloc.c |
| @@ -5478,26 +5478,28 @@ void set_pageblock_flags_group(struct pa |
| } |
| |
| /* |
| - * This is designed as sub function...plz see page_isolation.c also. |
| - * set/clear page block's type to be ISOLATE. |
| - * page allocater never alloc memory from ISOLATE block. |
| + * This function checks whether pageblock includes unmovable pages or not. |
| + * If @count is not zero, it is okay to include less @count unmovable pages |
| + * |
| + * PageLRU check wihtout isolation or lru_lock could race so that |
| + * MIGRATE_MOVABLE block might include unmovable pages. It means you can't |
| + * expect this function should be exact. |
| */ |
| - |
| -static int |
| -__count_immobile_pages(struct zone *zone, struct page *page, int count) |
| +static bool |
| +__has_unmovable_pages(struct zone *zone, struct page *page, int count) |
| { |
| unsigned long pfn, iter, found; |
| int mt; |
| |
| /* |
| * For avoiding noise data, lru_add_drain_all() should be called |
| - * If ZONE_MOVABLE, the zone never contains immobile pages |
| + * If ZONE_MOVABLE, the zone never contains unmovable pages |
| */ |
| if (zone_idx(zone) == ZONE_MOVABLE) |
| - return true; |
| + return false; |
| mt = get_pageblock_migratetype(page); |
| if (mt == MIGRATE_MOVABLE || is_migrate_cma(mt)) |
| - return true; |
| + return false; |
| |
| pfn = page_to_pfn(page); |
| for (found = 0, iter = 0; iter < pageblock_nr_pages; iter++) { |
| @@ -5528,9 +5530,9 @@ __count_immobile_pages(struct zone *zone |
| * page at boot. |
| */ |
| if (found > count) |
| - return false; |
| + return true; |
| } |
| - return true; |
| + return false; |
| } |
| |
| bool is_pageblock_removable_nolock(struct page *page) |
| @@ -5554,7 +5556,7 @@ bool is_pageblock_removable_nolock(struc |
| zone->zone_start_pfn + zone->spanned_pages <= pfn) |
| return false; |
| |
| - return __count_immobile_pages(zone, page, 0); |
| + return !__has_unmovable_pages(zone, page, 0); |
| } |
| |
| int set_migratetype_isolate(struct page *page) |
| @@ -5593,12 +5595,12 @@ int set_migratetype_isolate(struct page |
| * FIXME: Now, memory hotplug doesn't call shrink_slab() by itself. |
| * We just check MOVABLE pages. |
| */ |
| - if (__count_immobile_pages(zone, page, arg.pages_found)) |
| + if (!__has_unmovable_pages(zone, page, arg.pages_found)) |
| ret = 0; |
| - |
| /* |
| - * immobile means "not-on-lru" paes. If immobile is larger than |
| - * removable-by-driver pages reported by notifier, we'll fail. |
| + * Unmovable means "not-on-lru" pages. If Unmovable pages are |
| + * larger than removable-by-driver pages reported by notifier, |
| + * we'll fail. |
| */ |
| |
| out: |