diff options
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/cgroup.c | 21 | ||||
-rw-r--r-- | kernel/cpuset.c | 19 | ||||
-rw-r--r-- | kernel/kallsyms.c | 17 | ||||
-rw-r--r-- | kernel/sys_ni.c | 2 |
4 files changed, 43 insertions, 16 deletions
diff --git a/kernel/cgroup.c b/kernel/cgroup.c index 358e77564e6f..fe00b3b983a8 100644 --- a/kernel/cgroup.c +++ b/kernel/cgroup.c | |||
@@ -2039,10 +2039,13 @@ int cgroupstats_build(struct cgroupstats *stats, struct dentry *dentry) | |||
2039 | struct cgroup *cgrp; | 2039 | struct cgroup *cgrp; |
2040 | struct cgroup_iter it; | 2040 | struct cgroup_iter it; |
2041 | struct task_struct *tsk; | 2041 | struct task_struct *tsk; |
2042 | |||
2042 | /* | 2043 | /* |
2043 | * Validate dentry by checking the superblock operations | 2044 | * Validate dentry by checking the superblock operations, |
2045 | * and make sure it's a directory. | ||
2044 | */ | 2046 | */ |
2045 | if (dentry->d_sb->s_op != &cgroup_ops) | 2047 | if (dentry->d_sb->s_op != &cgroup_ops || |
2048 | !S_ISDIR(dentry->d_inode->i_mode)) | ||
2046 | goto err; | 2049 | goto err; |
2047 | 2050 | ||
2048 | ret = 0; | 2051 | ret = 0; |
@@ -2472,10 +2475,7 @@ static int cgroup_rmdir(struct inode *unused_dir, struct dentry *dentry) | |||
2472 | mutex_unlock(&cgroup_mutex); | 2475 | mutex_unlock(&cgroup_mutex); |
2473 | return -EBUSY; | 2476 | return -EBUSY; |
2474 | } | 2477 | } |
2475 | 2478 | mutex_unlock(&cgroup_mutex); | |
2476 | parent = cgrp->parent; | ||
2477 | root = cgrp->root; | ||
2478 | sb = root->sb; | ||
2479 | 2479 | ||
2480 | /* | 2480 | /* |
2481 | * Call pre_destroy handlers of subsys. Notify subsystems | 2481 | * Call pre_destroy handlers of subsys. Notify subsystems |
@@ -2483,7 +2483,14 @@ static int cgroup_rmdir(struct inode *unused_dir, struct dentry *dentry) | |||
2483 | */ | 2483 | */ |
2484 | cgroup_call_pre_destroy(cgrp); | 2484 | cgroup_call_pre_destroy(cgrp); |
2485 | 2485 | ||
2486 | if (cgroup_has_css_refs(cgrp)) { | 2486 | mutex_lock(&cgroup_mutex); |
2487 | parent = cgrp->parent; | ||
2488 | root = cgrp->root; | ||
2489 | sb = root->sb; | ||
2490 | |||
2491 | if (atomic_read(&cgrp->count) | ||
2492 | || !list_empty(&cgrp->children) | ||
2493 | || cgroup_has_css_refs(cgrp)) { | ||
2487 | mutex_unlock(&cgroup_mutex); | 2494 | mutex_unlock(&cgroup_mutex); |
2488 | return -EBUSY; | 2495 | return -EBUSY; |
2489 | } | 2496 | } |
diff --git a/kernel/cpuset.c b/kernel/cpuset.c index 81fc6791a296..da7ff6137f37 100644 --- a/kernel/cpuset.c +++ b/kernel/cpuset.c | |||
@@ -36,6 +36,7 @@ | |||
36 | #include <linux/list.h> | 36 | #include <linux/list.h> |
37 | #include <linux/mempolicy.h> | 37 | #include <linux/mempolicy.h> |
38 | #include <linux/mm.h> | 38 | #include <linux/mm.h> |
39 | #include <linux/memory.h> | ||
39 | #include <linux/module.h> | 40 | #include <linux/module.h> |
40 | #include <linux/mount.h> | 41 | #include <linux/mount.h> |
41 | #include <linux/namei.h> | 42 | #include <linux/namei.h> |
@@ -2015,12 +2016,23 @@ static int cpuset_track_online_cpus(struct notifier_block *unused_nb, | |||
2015 | * Call this routine anytime after node_states[N_HIGH_MEMORY] changes. | 2016 | * Call this routine anytime after node_states[N_HIGH_MEMORY] changes. |
2016 | * See also the previous routine cpuset_track_online_cpus(). | 2017 | * See also the previous routine cpuset_track_online_cpus(). |
2017 | */ | 2018 | */ |
2018 | void cpuset_track_online_nodes(void) | 2019 | static int cpuset_track_online_nodes(struct notifier_block *self, |
2020 | unsigned long action, void *arg) | ||
2019 | { | 2021 | { |
2020 | cgroup_lock(); | 2022 | cgroup_lock(); |
2021 | top_cpuset.mems_allowed = node_states[N_HIGH_MEMORY]; | 2023 | switch (action) { |
2022 | scan_for_empty_cpusets(&top_cpuset); | 2024 | case MEM_ONLINE: |
2025 | top_cpuset.mems_allowed = node_states[N_HIGH_MEMORY]; | ||
2026 | break; | ||
2027 | case MEM_OFFLINE: | ||
2028 | top_cpuset.mems_allowed = node_states[N_HIGH_MEMORY]; | ||
2029 | scan_for_empty_cpusets(&top_cpuset); | ||
2030 | break; | ||
2031 | default: | ||
2032 | break; | ||
2033 | } | ||
2023 | cgroup_unlock(); | 2034 | cgroup_unlock(); |
2035 | return NOTIFY_OK; | ||
2024 | } | 2036 | } |
2025 | #endif | 2037 | #endif |
2026 | 2038 | ||
@@ -2036,6 +2048,7 @@ void __init cpuset_init_smp(void) | |||
2036 | top_cpuset.mems_allowed = node_states[N_HIGH_MEMORY]; | 2048 | top_cpuset.mems_allowed = node_states[N_HIGH_MEMORY]; |
2037 | 2049 | ||
2038 | hotcpu_notifier(cpuset_track_online_cpus, 0); | 2050 | hotcpu_notifier(cpuset_track_online_cpus, 0); |
2051 | hotplug_memory_notifier(cpuset_track_online_nodes, 10); | ||
2039 | } | 2052 | } |
2040 | 2053 | ||
2041 | /** | 2054 | /** |
diff --git a/kernel/kallsyms.c b/kernel/kallsyms.c index 5072cf1685a2..7b8b0f21a5b1 100644 --- a/kernel/kallsyms.c +++ b/kernel/kallsyms.c | |||
@@ -304,17 +304,24 @@ int sprint_symbol(char *buffer, unsigned long address) | |||
304 | char *modname; | 304 | char *modname; |
305 | const char *name; | 305 | const char *name; |
306 | unsigned long offset, size; | 306 | unsigned long offset, size; |
307 | char namebuf[KSYM_NAME_LEN]; | 307 | int len; |
308 | 308 | ||
309 | name = kallsyms_lookup(address, &size, &offset, &modname, namebuf); | 309 | name = kallsyms_lookup(address, &size, &offset, &modname, buffer); |
310 | if (!name) | 310 | if (!name) |
311 | return sprintf(buffer, "0x%lx", address); | 311 | return sprintf(buffer, "0x%lx", address); |
312 | 312 | ||
313 | if (name != buffer) | ||
314 | strcpy(buffer, name); | ||
315 | len = strlen(buffer); | ||
316 | buffer += len; | ||
317 | |||
313 | if (modname) | 318 | if (modname) |
314 | return sprintf(buffer, "%s+%#lx/%#lx [%s]", name, offset, | 319 | len += sprintf(buffer, "+%#lx/%#lx [%s]", |
315 | size, modname); | 320 | offset, size, modname); |
316 | else | 321 | else |
317 | return sprintf(buffer, "%s+%#lx/%#lx", name, offset, size); | 322 | len += sprintf(buffer, "+%#lx/%#lx", offset, size); |
323 | |||
324 | return len; | ||
318 | } | 325 | } |
319 | 326 | ||
320 | /* Look up a kernel symbol and print it to the kernel messages. */ | 327 | /* Look up a kernel symbol and print it to the kernel messages. */ |
diff --git a/kernel/sys_ni.c b/kernel/sys_ni.c index a77b27b11b04..e14a23281707 100644 --- a/kernel/sys_ni.c +++ b/kernel/sys_ni.c | |||
@@ -31,7 +31,7 @@ cond_syscall(sys_socketpair); | |||
31 | cond_syscall(sys_bind); | 31 | cond_syscall(sys_bind); |
32 | cond_syscall(sys_listen); | 32 | cond_syscall(sys_listen); |
33 | cond_syscall(sys_accept); | 33 | cond_syscall(sys_accept); |
34 | cond_syscall(sys_paccept); | 34 | cond_syscall(sys_accept4); |
35 | cond_syscall(sys_connect); | 35 | cond_syscall(sys_connect); |
36 | cond_syscall(sys_getsockname); | 36 | cond_syscall(sys_getsockname); |
37 | cond_syscall(sys_getpeername); | 37 | cond_syscall(sys_getpeername); |