diff options
author | Hugh Dickins <hugh@veritas.com> | 2007-06-08 16:46:46 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-06-08 20:23:32 -0400 |
commit | a210906c1b791af1434323f69427286039c9c8b9 (patch) | |
tree | 17f3deeda2c7c6972b9a72113a14571c2cabaae7 | |
parent | 9739ed1c8eafd554788d8e2ba09847b5718a34e7 (diff) |
mount -t tmpfs -o mpol=: check nodes online
Randy Dunlap reports that a tmpfs, mounted with NUMA mpol= specifying an
offline node, crashes as soon as data is allocated upon it. Now restrict it
to online nodes, where before it restricted to MAX_NUMNODES.
Signed-off-by: Hugh Dickins <hugh@veritas.com>
Cc: Robin Holt <holt@sgi.com>
Cc: Christoph Lameter <clameter@sgi.com>
Cc: Andi Kleen <ak@suse.de>
Tested-and-acked-by: Randy Dunlap <randy.dunlap@oracle.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | Documentation/filesystems/tmpfs.txt | 10 | ||||
-rw-r--r-- | mm/shmem.c | 2 |
2 files changed, 7 insertions, 5 deletions
diff --git a/Documentation/filesystems/tmpfs.txt b/Documentation/filesystems/tmpfs.txt index 6dd050878a20..145e44086358 100644 --- a/Documentation/filesystems/tmpfs.txt +++ b/Documentation/filesystems/tmpfs.txt | |||
@@ -94,10 +94,10 @@ largest node numbers in the range. For example, mpol=bind:0-3,5,7,9-15 | |||
94 | 94 | ||
95 | Note that trying to mount a tmpfs with an mpol option will fail if the | 95 | Note that trying to mount a tmpfs with an mpol option will fail if the |
96 | running kernel does not support NUMA; and will fail if its nodelist | 96 | running kernel does not support NUMA; and will fail if its nodelist |
97 | specifies a node >= MAX_NUMNODES. If your system relies on that tmpfs | 97 | specifies a node which is not online. If your system relies on that |
98 | being mounted, but from time to time runs a kernel built without NUMA | 98 | tmpfs being mounted, but from time to time runs a kernel built without |
99 | capability (perhaps a safe recovery kernel), or configured to support | 99 | NUMA capability (perhaps a safe recovery kernel), or with fewer nodes |
100 | fewer nodes, then it is advisable to omit the mpol option from automatic | 100 | online, then it is advisable to omit the mpol option from automatic |
101 | mount options. It can be added later, when the tmpfs is already mounted | 101 | mount options. It can be added later, when the tmpfs is already mounted |
102 | on MountPoint, by 'mount -o remount,mpol=Policy:NodeList MountPoint'. | 102 | on MountPoint, by 'mount -o remount,mpol=Policy:NodeList MountPoint'. |
103 | 103 | ||
@@ -121,4 +121,4 @@ RAM/SWAP in 10240 inodes and it is only accessible by root. | |||
121 | Author: | 121 | Author: |
122 | Christoph Rohland <cr@sap.com>, 1.12.01 | 122 | Christoph Rohland <cr@sap.com>, 1.12.01 |
123 | Updated: | 123 | Updated: |
124 | Hugh Dickins <hugh@veritas.com>, 19 February 2006 | 124 | Hugh Dickins <hugh@veritas.com>, 4 June 2007 |
diff --git a/mm/shmem.c b/mm/shmem.c index e537317bec4d..b6aae2b33393 100644 --- a/mm/shmem.c +++ b/mm/shmem.c | |||
@@ -967,6 +967,8 @@ static inline int shmem_parse_mpol(char *value, int *policy, nodemask_t *policy_ | |||
967 | *nodelist++ = '\0'; | 967 | *nodelist++ = '\0'; |
968 | if (nodelist_parse(nodelist, *policy_nodes)) | 968 | if (nodelist_parse(nodelist, *policy_nodes)) |
969 | goto out; | 969 | goto out; |
970 | if (!nodes_subset(*policy_nodes, node_online_map)) | ||
971 | goto out; | ||
970 | } | 972 | } |
971 | if (!strcmp(value, "default")) { | 973 | if (!strcmp(value, "default")) { |
972 | *policy = MPOL_DEFAULT; | 974 | *policy = MPOL_DEFAULT; |