Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fde82aaa authored by Michal Hocko's avatar Michal Hocko Committed by Linus Torvalds
Browse files

mm/page_alloc.c: get rid of __alloc_pages_high_priority()



__alloc_pages_high_priority doesn't do anything special other than it
calls get_page_from_freelist and loops around GFP_NOFAIL allocation
until it succeeds.  It would be better if the first part was done in
__alloc_pages_slowpath where we modify the zonelist because this would
be easier to read and understand.  Opencoding the function into its only
caller allows to simplify it a bit as well.

This patch doesn't introduce any functional changes.

[akpm@linux-foundation.org: coding-style fixes]
Signed-off-by: default avatarMichal Hocko <mhocko@suse.com>
Acked-by: default avatarMel Gorman <mgorman@suse.de>
Acked-by: default avatarDavid Rientjes <rientjes@google.com>
Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent c00eb15a
Loading
Loading
Loading
Loading
+9 −27
Original line number Diff line number Diff line
@@ -2876,28 +2876,6 @@ __alloc_pages_direct_reclaim(gfp_t gfp_mask, unsigned int order,
	return page;
}

/*
 * This is called in the allocator slow-path if the allocation request is of
 * sufficient urgency to ignore watermarks and take other desperate measures
 */
static inline struct page *
__alloc_pages_high_priority(gfp_t gfp_mask, unsigned int order,
				const struct alloc_context *ac)
{
	struct page *page;

	do {
		page = get_page_from_freelist(gfp_mask, order,
						ALLOC_NO_WATERMARKS, ac);

		if (!page && gfp_mask & __GFP_NOFAIL)
			wait_iff_congested(ac->preferred_zone, BLK_RW_ASYNC,
									HZ/50);
	} while (!page && (gfp_mask & __GFP_NOFAIL));

	return page;
}

static void wake_all_kswapds(unsigned int order, const struct alloc_context *ac)
{
	struct zoneref *z;
@@ -3042,12 +3020,16 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order,
		 * allocations are system rather than user orientated
		 */
		ac->zonelist = node_zonelist(numa_node_id(), gfp_mask);

		page = __alloc_pages_high_priority(gfp_mask, order, ac);

		if (page) {
		do {
			page = get_page_from_freelist(gfp_mask, order,
						      ALLOC_NO_WATERMARKS, ac);
			if (page)
				goto got_pg;
		}

			if (gfp_mask & __GFP_NOFAIL)
				wait_iff_congested(ac->preferred_zone,
						   BLK_RW_ASYNC, HZ/50);
		} while (gfp_mask & __GFP_NOFAIL);
	}

	/* Caller is not willing to reclaim, we can't balance anything */