The patch titled cpusetmm-update-tasks-mems_allowed-in-time-fix has been added to the -mm tree. Its filename is cpusetmm-update-tasks-mems_allowed-in-time-fix.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/SubmitChecklist when testing your code *** See http://userweb.kernel.org/~akpm/stuff/added-to-mm.txt to find out what to do about this The current -mm tree may be found at http://userweb.kernel.org/~akpm/mmotm/ ------------------------------------------------------ Subject: cpusetmm-update-tasks-mems_allowed-in-time-fix From: Lee Schermerhorn <lee.schermerhorn@xxxxxx> The rework of mpol_new() to extract the adjusting of the node mask to apply cpuset and mpol flags "context" breaks set_mempolicy() and mbind() with MPOL_PREFERRED and a NULL nodemask--i.e., explicit local allocation. Fix this by adding the check for MPOL_PREFERRED and empty node mask to mpol_new_mpolicy(). Remove the now unneeded 'nodes = NULL' from mpol_new(). Note that mpol_new_mempolicy() is always called with a non-NULL 'nodes' parameter now that it has been removed from mpol_new(). Therefore, we don't need to test nodes for NULL before testing it for 'empty'. However, just to be extra paranoid, add a VM_BUG_ON() to verify this assumption. Tested on x86_64 with numactl-2.0.3-rc2+ regression test. Signed-off-by: Lee Schermerhorn <lee.schermerhorn@xxxxxx> Cc: Miao Xie <miaox@xxxxxxxxxxxxxx> Cc: Ingo Molnar <mingo@xxxxxxx> Cc: Peter Zijlstra <a.p.zijlstra@xxxxxxxxx> Cc: Christoph Lameter <cl@xxxxxxxxxxxxxxxxxxxx> Cc: Paul Menage <menage@xxxxxxxxxx> Cc: Nick Piggin <nickpiggin@xxxxxxxxxxxx> Cc: Yasunori Goto <y-goto@xxxxxxxxxxxxxx> Cc: Pekka Enberg <penberg@xxxxxxxxxxxxxx> Cc: David Rientjes <rientjes@xxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- mm/mempolicy.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff -puN mm/mempolicy.c~cpusetmm-update-tasks-mems_allowed-in-time-fix mm/mempolicy.c --- a/mm/mempolicy.c~cpusetmm-update-tasks-mems_allowed-in-time-fix +++ a/mm/mempolicy.c @@ -182,8 +182,9 @@ static int mpol_new_bind(struct mempolic return 0; } /* - * This function is called after mpol_new(). The parameter -- nodes needn't - * been check because mpol_new() has done it. Maybe this implement is ugly. + * This function is called after mpol_new(). mpol_new() has already validated + * the nodes parameter with respect to the policy mode and flags. But, we + * need to handle an empty nodemaks with MPOL_PREFERRED here. * * We use task's alloc_lock to protect task's mems_allowed and mempolicy. * so this function should be called with task's alloc_lock held. @@ -197,7 +198,10 @@ static int mpol_new_mempolicy(struct mem if (pol == NULL) return 0; - if (nodes) { + VM_BUG_ON(!nodes); + if (pol->mode == MPOL_PREFERRED && nodes_empty(*nodes)) + nodes = NULL; /* explicit local allocation */ + else { if (pol->flags & MPOL_F_RELATIVE_NODES) mpol_relative_nodemask(&cpuset_context_nmask, nodes, &cpuset_current_mems_allowed); @@ -243,7 +247,6 @@ static struct mempolicy *mpol_new(unsign if (((flags & MPOL_F_STATIC_NODES) || (flags & MPOL_F_RELATIVE_NODES))) return ERR_PTR(-EINVAL); - nodes = NULL; /* flag local alloc */ } } else if (nodes_empty(*nodes)) return ERR_PTR(-EINVAL); _ Patches currently in -mm which might be from lee.schermerhorn@xxxxxx are cpusetmm-update-tasks-mems_allowed-in-time-fix.patch cpusetmm-update-tasks-mems_allowed-in-time-cleanup.patch -- To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html