(Cc Vlastimil) On Sat, 25 May 2019 15:07:23 +0800 zhong jiang <zhongjiang@xxxxxxxxxx> wrote: > We bind an different node to different vma, Unluckily, > it will bind different vma to same node by checking the /proc/pid/numa_maps. > Commit 213980c0f23b ("mm, mempolicy: simplify rebinding mempolicies when updating cpusets") > has introduced the issue. when we change memory policy by seting cpuset.mems, > A process will rebind the specified policy more than one times. > if the cpuset_mems_allowed is not equal to user specified nodes. hence the issue will trigger. > Maybe result in the out of memory which allocating memory from same node. > > --- a/mm/mempolicy.c > +++ b/mm/mempolicy.c > @@ -345,7 +345,7 @@ static void mpol_rebind_nodemask(struct mempolicy *pol, const nodemask_t *nodes) > else { > nodes_remap(tmp, pol->v.nodes,pol->w.cpuset_mems_allowed, > *nodes); > - pol->w.cpuset_mems_allowed = tmp; > + pol->w.cpuset_mems_allowed = *nodes; > } > > if (nodes_empty(tmp)) hm, I'm not surprised the code broke. What the heck is going on in there? It used to have a perfunctory comment, but Vlastimil deleted it. Could someone please propose a comment for the above code block explaining why we're doing what we do?