Re: mm: page_alloc: avoid marking zones full prematurely after zone_reclaim()

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

 



[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>




[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]