Thread (30 messages) 30 messages, 6 authors, 2018-09-17

Re: [PATCH 2/2] mm: thp: fix transparent_hugepage/defrag = madvise || always

From: Michal Hocko <mhocko@suse.com>
Date: 2018-08-29 14:35:49
Subsystem: memory management, memory management - memory policy and migration, the rest · Maintainers: Andrew Morton, David Hildenbrand, Linus Torvalds

Possibly related (same subject, not in this thread)

On Wed 29-08-18 16:28:16, Michal Hocko wrote:
On Wed 29-08-18 09:28:21, Zi Yan wrote:
[...]
quoted
This patch triggers WARN_ON_ONCE() in policy_node() when MPOL_BIND is used and THP is on.
Should this WARN_ON_ONCE be removed?


/*
* __GFP_THISNODE shouldn't even be used with the bind policy
* because we might easily break the expectation to stay on the
* requested node and not break the policy.
*/
WARN_ON_ONCE(policy->mode == MPOL_BIND && (gfp & __GFP_THISNODE));
This is really interesting. It seems to be me who added this warning but
I cannot simply make any sense of it. Let me try to dig some more.
OK, I get it now. The warning seems to be incomplete. It is right to
complain when __GFP_THISNODE disagrees with MPOL_BIND policy but that is
not what we check here. Does this heal the warning?
diff --git a/mm/mempolicy.c b/mm/mempolicy.c
index da858f794eb6..7bb9354b1e4c 100644
--- a/mm/mempolicy.c
+++ b/mm/mempolicy.c
@@ -1728,7 +1728,10 @@ static int policy_node(gfp_t gfp, struct mempolicy *policy,
 		 * because we might easily break the expectation to stay on the
 		 * requested node and not break the policy.
 		 */
-		WARN_ON_ONCE(policy->mode == MPOL_BIND && (gfp & __GFP_THISNODE));
+		if (policy->mode == MPOL_BIND && (gfp & __GFP_THISNODE)) {
+			nodemask_t *nmask = policy_nodemask(gfp, policy);
+			WARN_ON_ONCE(!node_isset(nd, *nmask));
+		}
 	}
 
 	return nd;
-- 
Michal Hocko
SUSE Labs
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help