diff options
Diffstat (limited to 'mm/mempolicy.c')
-rw-r--r-- | mm/mempolicy.c | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/mm/mempolicy.c b/mm/mempolicy.c index acb5ee3587c3..1311dc4a3888 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c @@ -114,7 +114,7 @@ static void mpol_rebind_policy(struct mempolicy *pol, const nodemask_t *newmask); /* Do sanity checking on a policy */ -static int mpol_check_policy(int mode, nodemask_t *nodes) +static int mpol_check_policy(unsigned short mode, nodemask_t *nodes) { int was_empty, is_empty; @@ -159,6 +159,8 @@ static int mpol_check_policy(int mode, nodemask_t *nodes) if (!was_empty && is_empty) return -EINVAL; break; + default: + BUG(); } return 0; } @@ -185,7 +187,7 @@ static int is_valid_nodemask(nodemask_t *nodemask) } /* Create a new policy */ -static struct mempolicy *mpol_new(int mode, nodemask_t *nodes) +static struct mempolicy *mpol_new(unsigned short mode, nodemask_t *nodes) { struct mempolicy *policy; @@ -218,6 +220,8 @@ static struct mempolicy *mpol_new(int mode, nodemask_t *nodes) } policy->v.nodes = *nodes; break; + default: + BUG(); } policy->policy = mode; policy->cpuset_mems_allowed = cpuset_mems_allowed(current); @@ -462,7 +466,7 @@ static void mpol_set_task_struct_flag(void) } /* Set the process memory policy */ -static long do_set_mempolicy(int mode, nodemask_t *nodes) +static long do_set_mempolicy(unsigned short mode, nodemask_t *nodes) { struct mempolicy *new; @@ -759,7 +763,7 @@ static struct page *new_vma_page(struct page *page, unsigned long private, int * #endif static long do_mbind(unsigned long start, unsigned long len, - unsigned long mode, nodemask_t *nmask, + unsigned short mode, nodemask_t *nmask, unsigned long flags) { struct vm_area_struct *vma; @@ -769,9 +773,8 @@ static long do_mbind(unsigned long start, unsigned long len, int err; LIST_HEAD(pagelist); - if ((flags & ~(unsigned long)(MPOL_MF_STRICT | - MPOL_MF_MOVE | MPOL_MF_MOVE_ALL)) - || mode > MPOL_MAX) + if (flags & ~(unsigned long)(MPOL_MF_STRICT | + MPOL_MF_MOVE | MPOL_MF_MOVE_ALL)) return -EINVAL; if ((flags & MPOL_MF_MOVE_ALL) && !capable(CAP_SYS_NICE)) return -EPERM; @@ -804,7 +807,7 @@ static long do_mbind(unsigned long start, unsigned long len, if (!new) flags |= MPOL_MF_DISCONTIG_OK; - pr_debug("mbind %lx-%lx mode:%ld nodes:%lx\n",start,start+len, + pr_debug("mbind %lx-%lx mode:%d nodes:%lx\n", start, start + len, mode, nmask ? nodes_addr(*nmask)[0] : -1); down_write(&mm->mmap_sem); @@ -905,6 +908,8 @@ asmlinkage long sys_mbind(unsigned long start, unsigned long len, nodemask_t nodes; int err; + if (mode >= MPOL_MAX) + return -EINVAL; err = get_nodes(&nodes, nmask, maxnode); if (err) return err; @@ -918,7 +923,7 @@ asmlinkage long sys_set_mempolicy(int mode, unsigned long __user *nmask, int err; nodemask_t nodes; - if (mode < 0 || mode > MPOL_MAX) + if (mode < 0 || mode >= MPOL_MAX) return -EINVAL; err = get_nodes(&nodes, nmask, maxnode); if (err) @@ -1201,7 +1206,7 @@ static unsigned interleave_nodes(struct mempolicy *policy) */ unsigned slab_node(struct mempolicy *policy) { - int pol = policy ? policy->policy : MPOL_DEFAULT; + unsigned short pol = policy ? policy->policy : MPOL_DEFAULT; switch (pol) { case MPOL_INTERLEAVE: @@ -1635,7 +1640,7 @@ restart: return 0; } -void mpol_shared_policy_init(struct shared_policy *info, int policy, +void mpol_shared_policy_init(struct shared_policy *info, unsigned short policy, nodemask_t *policy_nodes) { info->root = RB_ROOT; @@ -1830,7 +1835,7 @@ static inline int mpol_to_str(char *buffer, int maxlen, struct mempolicy *pol) char *p = buffer; int l; nodemask_t nodes; - int mode = pol ? pol->policy : MPOL_DEFAULT; + unsigned short mode = pol ? pol->policy : MPOL_DEFAULT; switch (mode) { case MPOL_DEFAULT: |