diff options
-rw-r--r-- | include/uapi/linux/mempolicy.h | 1 | ||||
-rw-r--r-- | mm/mempolicy.c | 11 |
2 files changed, 7 insertions, 5 deletions
diff --git a/include/uapi/linux/mempolicy.h b/include/uapi/linux/mempolicy.h index 3e835c9d847b..d23dca8367cc 100644 --- a/include/uapi/linux/mempolicy.h +++ b/include/uapi/linux/mempolicy.h | |||
@@ -21,6 +21,7 @@ enum { | |||
21 | MPOL_BIND, | 21 | MPOL_BIND, |
22 | MPOL_INTERLEAVE, | 22 | MPOL_INTERLEAVE, |
23 | MPOL_LOCAL, | 23 | MPOL_LOCAL, |
24 | MPOL_NOOP, /* retain existing policy for range */ | ||
24 | MPOL_MAX, /* always last member of enum */ | 25 | MPOL_MAX, /* always last member of enum */ |
25 | }; | 26 | }; |
26 | 27 | ||
diff --git a/mm/mempolicy.c b/mm/mempolicy.c index 54bd3e5ed776..c21e91477c4f 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c | |||
@@ -251,10 +251,10 @@ static struct mempolicy *mpol_new(unsigned short mode, unsigned short flags, | |||
251 | pr_debug("setting mode %d flags %d nodes[0] %lx\n", | 251 | pr_debug("setting mode %d flags %d nodes[0] %lx\n", |
252 | mode, flags, nodes ? nodes_addr(*nodes)[0] : -1); | 252 | mode, flags, nodes ? nodes_addr(*nodes)[0] : -1); |
253 | 253 | ||
254 | if (mode == MPOL_DEFAULT) { | 254 | if (mode == MPOL_DEFAULT || mode == MPOL_NOOP) { |
255 | if (nodes && !nodes_empty(*nodes)) | 255 | if (nodes && !nodes_empty(*nodes)) |
256 | return ERR_PTR(-EINVAL); | 256 | return ERR_PTR(-EINVAL); |
257 | return NULL; /* simply delete any existing policy */ | 257 | return NULL; |
258 | } | 258 | } |
259 | VM_BUG_ON(!nodes); | 259 | VM_BUG_ON(!nodes); |
260 | 260 | ||
@@ -1147,7 +1147,7 @@ static long do_mbind(unsigned long start, unsigned long len, | |||
1147 | if (start & ~PAGE_MASK) | 1147 | if (start & ~PAGE_MASK) |
1148 | return -EINVAL; | 1148 | return -EINVAL; |
1149 | 1149 | ||
1150 | if (mode == MPOL_DEFAULT) | 1150 | if (mode == MPOL_DEFAULT || mode == MPOL_NOOP) |
1151 | flags &= ~MPOL_MF_STRICT; | 1151 | flags &= ~MPOL_MF_STRICT; |
1152 | 1152 | ||
1153 | len = (len + PAGE_SIZE - 1) & PAGE_MASK; | 1153 | len = (len + PAGE_SIZE - 1) & PAGE_MASK; |
@@ -2409,7 +2409,8 @@ static const char * const policy_modes[] = | |||
2409 | [MPOL_PREFERRED] = "prefer", | 2409 | [MPOL_PREFERRED] = "prefer", |
2410 | [MPOL_BIND] = "bind", | 2410 | [MPOL_BIND] = "bind", |
2411 | [MPOL_INTERLEAVE] = "interleave", | 2411 | [MPOL_INTERLEAVE] = "interleave", |
2412 | [MPOL_LOCAL] = "local" | 2412 | [MPOL_LOCAL] = "local", |
2413 | [MPOL_NOOP] = "noop", /* should not actually be used */ | ||
2413 | }; | 2414 | }; |
2414 | 2415 | ||
2415 | 2416 | ||
@@ -2460,7 +2461,7 @@ int mpol_parse_str(char *str, struct mempolicy **mpol, int no_context) | |||
2460 | break; | 2461 | break; |
2461 | } | 2462 | } |
2462 | } | 2463 | } |
2463 | if (mode >= MPOL_MAX) | 2464 | if (mode >= MPOL_MAX || mode == MPOL_NOOP) |
2464 | goto out; | 2465 | goto out; |
2465 | 2466 | ||
2466 | switch (mode) { | 2467 | switch (mode) { |