> --- a/mm/page_alloc.c
> +++ b/mm/page_alloc.c
> @@ -3191,8 +3191,23 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int 
> order,
>                */
>               if (__zone_watermark_ok(zone, order, min_wmark_pages(zone),
>                               ac->high_zoneidx, alloc_flags, target)) {
> -                     /* Wait for some write requests to complete then retry 
> */
> -                     wait_iff_congested(zone, BLK_RW_ASYNC, HZ/50);
> +                     unsigned long writeback = zone_page_state(zone, 
> NR_WRITEBACK),
> +                                   dirty = zone_page_state(zone, 
> NR_FILE_DIRTY);
> +
> +                     if (did_some_progress)
> +                             goto retry;
> +
> +                     /*
> +                      * If we didn't make any progress and have a lot of
> +                      * dirty + writeback pages then we should wait for
> +                      * an IO to complete to slow down the reclaim and
> +                      * prevent from pre mature OOM
> +                      */
> +                     if (2*(writeback + dirty) > reclaimable)
> +                             congestion_wait(BLK_RW_ASYNC, HZ/10);
> +                     else
> +                             cond_resched();
> +

Looks the vmstat updater issue is not addressed.
>                       goto retry;
>               }
>       }
> --
> 2.6.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to