diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-11-02 19:07:27 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-11-02 19:07:27 -0400 |
commit | 092f4c56c1927e4b61a41ee8055005f1cb437009 (patch) | |
tree | 616ceb54b7671ccc13922ae9e002b8b972f6e09e /kernel/utsname_sysctl.c | |
parent | 80c2861672bbf000f6af838656959ee937e4ee4d (diff) | |
parent | c1e2ee2dc436574880758b3836fc96935b774c32 (diff) |
Merge branch 'akpm' (Andrew's incoming - part two)
Says Andrew:
"60 patches. That's good enough for -rc1 I guess. I have quite a lot
of detritus to be rechecked, work through maintainers, etc.
- most of the remains of MM
- rtc
- various misc
- cgroups
- memcg
- cpusets
- procfs
- ipc
- rapidio
- sysctl
- pps
- w1
- drivers/misc
- aio"
* akpm: (60 commits)
memcg: replace ss->id_lock with a rwlock
aio: allocate kiocbs in batches
drivers/misc/vmw_balloon.c: fix typo in code comment
drivers/misc/vmw_balloon.c: determine page allocation flag can_sleep outside loop
w1: disable irqs in critical section
drivers/w1/w1_int.c: multiple masters used same init_name
drivers/power/ds2780_battery.c: fix deadlock upon insertion and removal
drivers/power/ds2780_battery.c: add a nolock function to w1 interface
drivers/power/ds2780_battery.c: create central point for calling w1 interface
w1: ds2760 and ds2780, use ida for id and ida_simple_get() to get it
pps gpio client: add missing dependency
pps: new client driver using GPIO
pps: default echo function
include/linux/dma-mapping.h: add dma_zalloc_coherent()
sysctl: make CONFIG_SYSCTL_SYSCALL default to n
sysctl: add support for poll()
RapidIO: documentation update
drivers/net/rionet.c: fix ethernet address macros for LE platforms
RapidIO: fix potential null deref in rio_setup_device()
RapidIO: add mport driver for Tsi721 bridge
...
Diffstat (limited to 'kernel/utsname_sysctl.c')
-rw-r--r-- | kernel/utsname_sysctl.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/kernel/utsname_sysctl.c b/kernel/utsname_sysctl.c index a2cd77e70d4d..3b0d48ebf81d 100644 --- a/kernel/utsname_sysctl.c +++ b/kernel/utsname_sysctl.c | |||
@@ -13,6 +13,7 @@ | |||
13 | #include <linux/uts.h> | 13 | #include <linux/uts.h> |
14 | #include <linux/utsname.h> | 14 | #include <linux/utsname.h> |
15 | #include <linux/sysctl.h> | 15 | #include <linux/sysctl.h> |
16 | #include <linux/wait.h> | ||
16 | 17 | ||
17 | static void *get_uts(ctl_table *table, int write) | 18 | static void *get_uts(ctl_table *table, int write) |
18 | { | 19 | { |
@@ -51,12 +52,19 @@ static int proc_do_uts_string(ctl_table *table, int write, | |||
51 | uts_table.data = get_uts(table, write); | 52 | uts_table.data = get_uts(table, write); |
52 | r = proc_dostring(&uts_table,write,buffer,lenp, ppos); | 53 | r = proc_dostring(&uts_table,write,buffer,lenp, ppos); |
53 | put_uts(table, write, uts_table.data); | 54 | put_uts(table, write, uts_table.data); |
55 | |||
56 | if (write) | ||
57 | proc_sys_poll_notify(table->poll); | ||
58 | |||
54 | return r; | 59 | return r; |
55 | } | 60 | } |
56 | #else | 61 | #else |
57 | #define proc_do_uts_string NULL | 62 | #define proc_do_uts_string NULL |
58 | #endif | 63 | #endif |
59 | 64 | ||
65 | static DEFINE_CTL_TABLE_POLL(hostname_poll); | ||
66 | static DEFINE_CTL_TABLE_POLL(domainname_poll); | ||
67 | |||
60 | static struct ctl_table uts_kern_table[] = { | 68 | static struct ctl_table uts_kern_table[] = { |
61 | { | 69 | { |
62 | .procname = "ostype", | 70 | .procname = "ostype", |
@@ -85,6 +93,7 @@ static struct ctl_table uts_kern_table[] = { | |||
85 | .maxlen = sizeof(init_uts_ns.name.nodename), | 93 | .maxlen = sizeof(init_uts_ns.name.nodename), |
86 | .mode = 0644, | 94 | .mode = 0644, |
87 | .proc_handler = proc_do_uts_string, | 95 | .proc_handler = proc_do_uts_string, |
96 | .poll = &hostname_poll, | ||
88 | }, | 97 | }, |
89 | { | 98 | { |
90 | .procname = "domainname", | 99 | .procname = "domainname", |
@@ -92,6 +101,7 @@ static struct ctl_table uts_kern_table[] = { | |||
92 | .maxlen = sizeof(init_uts_ns.name.domainname), | 101 | .maxlen = sizeof(init_uts_ns.name.domainname), |
93 | .mode = 0644, | 102 | .mode = 0644, |
94 | .proc_handler = proc_do_uts_string, | 103 | .proc_handler = proc_do_uts_string, |
104 | .poll = &domainname_poll, | ||
95 | }, | 105 | }, |
96 | {} | 106 | {} |
97 | }; | 107 | }; |
@@ -105,6 +115,19 @@ static struct ctl_table uts_root_table[] = { | |||
105 | {} | 115 | {} |
106 | }; | 116 | }; |
107 | 117 | ||
118 | #ifdef CONFIG_PROC_SYSCTL | ||
119 | /* | ||
120 | * Notify userspace about a change in a certain entry of uts_kern_table, | ||
121 | * identified by the parameter proc. | ||
122 | */ | ||
123 | void uts_proc_notify(enum uts_proc proc) | ||
124 | { | ||
125 | struct ctl_table *table = &uts_kern_table[proc]; | ||
126 | |||
127 | proc_sys_poll_notify(table->poll); | ||
128 | } | ||
129 | #endif | ||
130 | |||
108 | static int __init utsname_sysctl_init(void) | 131 | static int __init utsname_sysctl_init(void) |
109 | { | 132 | { |
110 | register_sysctl_table(uts_root_table); | 133 | register_sysctl_table(uts_root_table); |