diff options
Diffstat (limited to 'mm/mempolicy.c')
-rw-r--r-- | mm/mempolicy.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/mm/mempolicy.c b/mm/mempolicy.c index 3a45b7dd0a09..ccbdb22147bb 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c | |||
@@ -526,8 +526,18 @@ long do_get_mempolicy(int *policy, nodemask_t *nmask, | |||
526 | struct mempolicy *pol = current->mempolicy; | 526 | struct mempolicy *pol = current->mempolicy; |
527 | 527 | ||
528 | cpuset_update_task_memory_state(); | 528 | cpuset_update_task_memory_state(); |
529 | if (flags & ~(unsigned long)(MPOL_F_NODE|MPOL_F_ADDR)) | 529 | if (flags & |
530 | ~(unsigned long)(MPOL_F_NODE|MPOL_F_ADDR|MPOL_F_MEMS_ALLOWED)) | ||
530 | return -EINVAL; | 531 | return -EINVAL; |
532 | |||
533 | if (flags & MPOL_F_MEMS_ALLOWED) { | ||
534 | if (flags & (MPOL_F_NODE|MPOL_F_ADDR)) | ||
535 | return -EINVAL; | ||
536 | *policy = 0; /* just so it's initialized */ | ||
537 | *nmask = cpuset_current_mems_allowed; | ||
538 | return 0; | ||
539 | } | ||
540 | |||
531 | if (flags & MPOL_F_ADDR) { | 541 | if (flags & MPOL_F_ADDR) { |
532 | down_read(&mm->mmap_sem); | 542 | down_read(&mm->mmap_sem); |
533 | vma = find_vma_intersection(mm, addr, addr+1); | 543 | vma = find_vma_intersection(mm, addr, addr+1); |