[Adding Andrew into CC] Hi Dan, On Wed 27-03-13 09:01:42, Dan Carpenter wrote: > Hello Mel Gorman, > > The patch 290d1a3ce0ec: "mm: page_alloc: avoid marking zones full > prematurely after zone_reclaim()" from Mar 23, 2013, leads to the > following warning: > "mm/page_alloc.c:1957 get_page_from_freelist() > warn: bitwise AND condition is false here" Dohh, I have totally missed this during review and I managed to burn myself on the similar issue in the past (gfp & GFP_NOWAIT). The follow up fix is bellow > mm/page_alloc.c > 1948 /* > 1949 * Failed to reclaim enough to meet watermark. > 1950 * Only mark the zone full if checking the min > 1951 * watermark or if we failed to reclaim just > 1952 * 1<<order pages or else the page allocator > 1953 * fastpath will prematurely mark zones full > 1954 * when the watermark is between the low and > 1955 * min watermarks. > 1956 */ > 1957 if ((alloc_flags & ALLOC_WMARK_MIN) || > ^^^^^^^^^^^^^^^ > This is zero. > > 1958 ret == ZONE_RECLAIM_SOME) > 1959 goto this_zone_full; > > [snip] > > 2333 static inline int > 2334 gfp_to_alloc_flags(gfp_t gfp_mask) > 2335 { > 2336 int alloc_flags = ALLOC_WMARK_MIN | ALLOC_CPUSET; > ^^^^^^^^^^^^^^^ > 2337 const gfp_t wait = gfp_mask & __GFP_WAIT; --- >From b60e75c65b855a0df827a28a509e6761b4cf45dd Mon Sep 17 00:00:00 2001 From: Michal Hocko <mhocko@xxxxxxx> Date: Wed, 27 Mar 2013 17:53:09 +0100 Subject: [PATCH] mm: mm-page_alloc-avoid-marking-zones-full-prematurely-after-zone_reclaim-fix Dan Carpenter has reported that (alloc_flags & ALLOC_WMARK_MIN) test doesn't make much sense as the flag is 0 and it is in fact intended for wmark indexing rather than being used as a flag. Signed-off-by: Michal Hocko <mhocko@xxxxxxx> --- mm/page_alloc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index aa4b5c2..071e66a 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -1953,7 +1953,7 @@ zonelist_scan: * when the watermark is between the low and * min watermarks. */ - if ((alloc_flags & ALLOC_WMARK_MIN) || + if (((alloc_flags & ALLOC_WMARK_MASK) == ALLOC_WMARK_MIN) || ret == ZONE_RECLAIM_SOME) goto this_zone_full; -- 1.7.10.4 -- 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>