Re: More OOM problems

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon 19-09-16 00:00:24, Vlastimil Babka wrote:
[...]
> diff --git a/mm/page_alloc.c b/mm/page_alloc.c
> index a2214c64ed3c..9b3b3a79c58a 100644
> --- a/mm/page_alloc.c
> +++ b/mm/page_alloc.c
> @@ -3347,17 +3347,24 @@ should_reclaim_retry(gfp_t gfp_mask, unsigned order,
>  					ac->nodemask) {
>  		unsigned long available;
>  		unsigned long reclaimable;
> +		int check_order = order;
> +		unsigned long watermark = min_wmark_pages(zone);
>  
>  		available = reclaimable = zone_reclaimable_pages(zone);
>  		available -= DIV_ROUND_UP(no_progress_loops * available,
>  					  MAX_RECLAIM_RETRIES);
>  		available += zone_page_state_snapshot(zone, NR_FREE_PAGES);
>  
> +		if (order > 0 && order <= PAGE_ALLOC_COSTLY_ORDER) {
> +			check_order = 0;
> +			watermark += 1UL << order;
> +		}
> +
>  		/*
>  		 * Would the allocation succeed if we reclaimed the whole
>  		 * available?
>  		 */
> -		if (__zone_watermark_ok(zone, order, min_wmark_pages(zone),
> +		if (__zone_watermark_ok(zone, check_order, watermark,
>  				ac_classzone_idx(ac), alloc_flags, available)) {
>  			/*
>  			 * If we didn't make any progress and have a lot of

Joonsoo was suggesting something like this before and I really hated
that. We can very well just not invoke the OOM killer for those requests
at all and rely on a smaller order request to trigger it for us. But
who knows maybe we will have no other option and bite the bullet and
declare the defeat and do something special for !costly orders.
-- 
Michal Hocko
SUSE Labs

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@xxxxxxxxx.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@xxxxxxxxx";> email@xxxxxxxxx </a>



[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]