diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-07-26 23:23:44 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-07-26 23:23:44 -0400 |
commit | 4836e3007882984279ca63d3c42bf0b14616eb78 (patch) | |
tree | 28bf22726964e068b825491d71a141eefedbe5f8 /net | |
parent | 5c7c204aeca51ccfad63caab4fcdc5d8026c0fd8 (diff) | |
parent | 4e1e018ecc6f7bfd10fc75b3ff9715cc8164e0a2 (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6: (39 commits)
[PATCH] fix RLIM_NOFILE handling
[PATCH] get rid of corner case in dup3() entirely
[PATCH] remove remaining namei_{32,64}.h crap
[PATCH] get rid of indirect users of namei.h
[PATCH] get rid of __user_path_lookup_open
[PATCH] f_count may wrap around
[PATCH] dup3 fix
[PATCH] don't pass nameidata to __ncp_lookup_validate()
[PATCH] don't pass nameidata to gfs2_lookupi()
[PATCH] new (local) helper: user_path_parent()
[PATCH] sanitize __user_walk_fd() et.al.
[PATCH] preparation to __user_walk_fd cleanup
[PATCH] kill nameidata passing to permission(), rename to inode_permission()
[PATCH] take noexec checks to very few callers that care
Re: [PATCH 3/6] vfs: open_exec cleanup
[patch 4/4] vfs: immutable inode checking cleanup
[patch 3/4] fat: dont call notify_change
[patch 2/4] vfs: utimes cleanup
[patch 1/4] vfs: utimes: move owner check into inode_change_ok()
[PATCH] vfs: use kstrdup() and check failing allocation
...
Diffstat (limited to 'net')
-rw-r--r-- | net/ipv4/af_inet.c | 4 | ||||
-rw-r--r-- | net/ipv4/sysctl_net_ipv4.c | 7 | ||||
-rw-r--r-- | net/sched/sch_atm.c | 4 | ||||
-rw-r--r-- | net/sysctl_net.c | 22 | ||||
-rw-r--r-- | net/unix/af_unix.c | 2 | ||||
-rw-r--r-- | net/unix/garbage.c | 18 |
6 files changed, 33 insertions, 24 deletions
diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c index d9f15ddac316..8a3ac1fa71a9 100644 --- a/net/ipv4/af_inet.c +++ b/net/ipv4/af_inet.c | |||
@@ -1439,6 +1439,10 @@ static int __init inet_init(void) | |||
1439 | 1439 | ||
1440 | (void)sock_register(&inet_family_ops); | 1440 | (void)sock_register(&inet_family_ops); |
1441 | 1441 | ||
1442 | #ifdef CONFIG_SYSCTL | ||
1443 | ip_static_sysctl_init(); | ||
1444 | #endif | ||
1445 | |||
1442 | /* | 1446 | /* |
1443 | * Add all the base protocols. | 1447 | * Add all the base protocols. |
1444 | */ | 1448 | */ |
diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c index 14ef202a2254..d63e9388d92d 100644 --- a/net/ipv4/sysctl_net_ipv4.c +++ b/net/ipv4/sysctl_net_ipv4.c | |||
@@ -882,4 +882,11 @@ static __init int sysctl_ipv4_init(void) | |||
882 | return 0; | 882 | return 0; |
883 | } | 883 | } |
884 | 884 | ||
885 | /* set enough of tree skeleton to get rid of ordering problems */ | ||
886 | void __init ip_static_sysctl_init(void) | ||
887 | { | ||
888 | static ctl_table table[1]; | ||
889 | register_sysctl_paths(net_ipv4_ctl_path, table); | ||
890 | } | ||
891 | |||
885 | __initcall(sysctl_ipv4_init); | 892 | __initcall(sysctl_ipv4_init); |
diff --git a/net/sched/sch_atm.c b/net/sched/sch_atm.c index 04faa835be17..6b517b9dac5b 100644 --- a/net/sched/sch_atm.c +++ b/net/sched/sch_atm.c | |||
@@ -162,7 +162,7 @@ static void atm_tc_put(struct Qdisc *sch, unsigned long cl) | |||
162 | qdisc_destroy(flow->q); | 162 | qdisc_destroy(flow->q); |
163 | tcf_destroy_chain(&flow->filter_list); | 163 | tcf_destroy_chain(&flow->filter_list); |
164 | if (flow->sock) { | 164 | if (flow->sock) { |
165 | pr_debug("atm_tc_put: f_count %d\n", | 165 | pr_debug("atm_tc_put: f_count %ld\n", |
166 | file_count(flow->sock->file)); | 166 | file_count(flow->sock->file)); |
167 | flow->vcc->pop = flow->old_pop; | 167 | flow->vcc->pop = flow->old_pop; |
168 | sockfd_put(flow->sock); | 168 | sockfd_put(flow->sock); |
@@ -259,7 +259,7 @@ static int atm_tc_change(struct Qdisc *sch, u32 classid, u32 parent, | |||
259 | sock = sockfd_lookup(fd, &error); | 259 | sock = sockfd_lookup(fd, &error); |
260 | if (!sock) | 260 | if (!sock) |
261 | return error; /* f_count++ */ | 261 | return error; /* f_count++ */ |
262 | pr_debug("atm_tc_change: f_count %d\n", file_count(sock->file)); | 262 | pr_debug("atm_tc_change: f_count %ld\n", file_count(sock->file)); |
263 | if (sock->ops->family != PF_ATMSVC && sock->ops->family != PF_ATMPVC) { | 263 | if (sock->ops->family != PF_ATMSVC && sock->ops->family != PF_ATMPVC) { |
264 | error = -EPROTOTYPE; | 264 | error = -EPROTOTYPE; |
265 | goto err_out; | 265 | goto err_out; |
diff --git a/net/sysctl_net.c b/net/sysctl_net.c index 63ada437fc2f..cefbc367d8be 100644 --- a/net/sysctl_net.c +++ b/net/sysctl_net.c | |||
@@ -29,10 +29,15 @@ | |||
29 | #include <linux/if_tr.h> | 29 | #include <linux/if_tr.h> |
30 | #endif | 30 | #endif |
31 | 31 | ||
32 | static struct list_head * | 32 | static struct ctl_table_set * |
33 | net_ctl_header_lookup(struct ctl_table_root *root, struct nsproxy *namespaces) | 33 | net_ctl_header_lookup(struct ctl_table_root *root, struct nsproxy *namespaces) |
34 | { | 34 | { |
35 | return &namespaces->net_ns->sysctl_table_headers; | 35 | return &namespaces->net_ns->sysctls; |
36 | } | ||
37 | |||
38 | static int is_seen(struct ctl_table_set *set) | ||
39 | { | ||
40 | return ¤t->nsproxy->net_ns->sysctls == set; | ||
36 | } | 41 | } |
37 | 42 | ||
38 | /* Return standard mode bits for table entry. */ | 43 | /* Return standard mode bits for table entry. */ |
@@ -53,13 +58,6 @@ static struct ctl_table_root net_sysctl_root = { | |||
53 | .permissions = net_ctl_permissions, | 58 | .permissions = net_ctl_permissions, |
54 | }; | 59 | }; |
55 | 60 | ||
56 | static LIST_HEAD(net_sysctl_ro_tables); | ||
57 | static struct list_head *net_ctl_ro_header_lookup(struct ctl_table_root *root, | ||
58 | struct nsproxy *namespaces) | ||
59 | { | ||
60 | return &net_sysctl_ro_tables; | ||
61 | } | ||
62 | |||
63 | static int net_ctl_ro_header_perms(struct ctl_table_root *root, | 61 | static int net_ctl_ro_header_perms(struct ctl_table_root *root, |
64 | struct nsproxy *namespaces, struct ctl_table *table) | 62 | struct nsproxy *namespaces, struct ctl_table *table) |
65 | { | 63 | { |
@@ -70,19 +68,18 @@ static int net_ctl_ro_header_perms(struct ctl_table_root *root, | |||
70 | } | 68 | } |
71 | 69 | ||
72 | static struct ctl_table_root net_sysctl_ro_root = { | 70 | static struct ctl_table_root net_sysctl_ro_root = { |
73 | .lookup = net_ctl_ro_header_lookup, | ||
74 | .permissions = net_ctl_ro_header_perms, | 71 | .permissions = net_ctl_ro_header_perms, |
75 | }; | 72 | }; |
76 | 73 | ||
77 | static int sysctl_net_init(struct net *net) | 74 | static int sysctl_net_init(struct net *net) |
78 | { | 75 | { |
79 | INIT_LIST_HEAD(&net->sysctl_table_headers); | 76 | setup_sysctl_set(&net->sysctls, NULL, is_seen); |
80 | return 0; | 77 | return 0; |
81 | } | 78 | } |
82 | 79 | ||
83 | static void sysctl_net_exit(struct net *net) | 80 | static void sysctl_net_exit(struct net *net) |
84 | { | 81 | { |
85 | WARN_ON(!list_empty(&net->sysctl_table_headers)); | 82 | WARN_ON(!list_empty(&net->sysctls.list)); |
86 | return; | 83 | return; |
87 | } | 84 | } |
88 | 85 | ||
@@ -98,6 +95,7 @@ static __init int sysctl_init(void) | |||
98 | if (ret) | 95 | if (ret) |
99 | goto out; | 96 | goto out; |
100 | register_sysctl_root(&net_sysctl_root); | 97 | register_sysctl_root(&net_sysctl_root); |
98 | setup_sysctl_set(&net_sysctl_ro_root.default_set, NULL, NULL); | ||
101 | register_sysctl_root(&net_sysctl_ro_root); | 99 | register_sysctl_root(&net_sysctl_ro_root); |
102 | out: | 100 | out: |
103 | return ret; | 101 | return ret; |
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index 24eb214581d5..015606b54d9b 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c | |||
@@ -603,7 +603,7 @@ static struct sock * unix_create1(struct net *net, struct socket *sock) | |||
603 | u->dentry = NULL; | 603 | u->dentry = NULL; |
604 | u->mnt = NULL; | 604 | u->mnt = NULL; |
605 | spin_lock_init(&u->lock); | 605 | spin_lock_init(&u->lock); |
606 | atomic_set(&u->inflight, 0); | 606 | atomic_long_set(&u->inflight, 0); |
607 | INIT_LIST_HEAD(&u->link); | 607 | INIT_LIST_HEAD(&u->link); |
608 | mutex_init(&u->readlock); /* single task reading lock */ | 608 | mutex_init(&u->readlock); /* single task reading lock */ |
609 | init_waitqueue_head(&u->peer_wait); | 609 | init_waitqueue_head(&u->peer_wait); |
diff --git a/net/unix/garbage.c b/net/unix/garbage.c index ebdff3d877a1..2a27b84f740b 100644 --- a/net/unix/garbage.c +++ b/net/unix/garbage.c | |||
@@ -127,7 +127,7 @@ void unix_inflight(struct file *fp) | |||
127 | if(s) { | 127 | if(s) { |
128 | struct unix_sock *u = unix_sk(s); | 128 | struct unix_sock *u = unix_sk(s); |
129 | spin_lock(&unix_gc_lock); | 129 | spin_lock(&unix_gc_lock); |
130 | if (atomic_inc_return(&u->inflight) == 1) { | 130 | if (atomic_long_inc_return(&u->inflight) == 1) { |
131 | BUG_ON(!list_empty(&u->link)); | 131 | BUG_ON(!list_empty(&u->link)); |
132 | list_add_tail(&u->link, &gc_inflight_list); | 132 | list_add_tail(&u->link, &gc_inflight_list); |
133 | } else { | 133 | } else { |
@@ -145,7 +145,7 @@ void unix_notinflight(struct file *fp) | |||
145 | struct unix_sock *u = unix_sk(s); | 145 | struct unix_sock *u = unix_sk(s); |
146 | spin_lock(&unix_gc_lock); | 146 | spin_lock(&unix_gc_lock); |
147 | BUG_ON(list_empty(&u->link)); | 147 | BUG_ON(list_empty(&u->link)); |
148 | if (atomic_dec_and_test(&u->inflight)) | 148 | if (atomic_long_dec_and_test(&u->inflight)) |
149 | list_del_init(&u->link); | 149 | list_del_init(&u->link); |
150 | unix_tot_inflight--; | 150 | unix_tot_inflight--; |
151 | spin_unlock(&unix_gc_lock); | 151 | spin_unlock(&unix_gc_lock); |
@@ -237,17 +237,17 @@ static void scan_children(struct sock *x, void (*func)(struct unix_sock *), | |||
237 | 237 | ||
238 | static void dec_inflight(struct unix_sock *usk) | 238 | static void dec_inflight(struct unix_sock *usk) |
239 | { | 239 | { |
240 | atomic_dec(&usk->inflight); | 240 | atomic_long_dec(&usk->inflight); |
241 | } | 241 | } |
242 | 242 | ||
243 | static void inc_inflight(struct unix_sock *usk) | 243 | static void inc_inflight(struct unix_sock *usk) |
244 | { | 244 | { |
245 | atomic_inc(&usk->inflight); | 245 | atomic_long_inc(&usk->inflight); |
246 | } | 246 | } |
247 | 247 | ||
248 | static void inc_inflight_move_tail(struct unix_sock *u) | 248 | static void inc_inflight_move_tail(struct unix_sock *u) |
249 | { | 249 | { |
250 | atomic_inc(&u->inflight); | 250 | atomic_long_inc(&u->inflight); |
251 | /* | 251 | /* |
252 | * If this is still a candidate, move it to the end of the | 252 | * If this is still a candidate, move it to the end of the |
253 | * list, so that it's checked even if it was already passed | 253 | * list, so that it's checked even if it was already passed |
@@ -288,11 +288,11 @@ void unix_gc(void) | |||
288 | * before the detach without atomicity guarantees. | 288 | * before the detach without atomicity guarantees. |
289 | */ | 289 | */ |
290 | list_for_each_entry_safe(u, next, &gc_inflight_list, link) { | 290 | list_for_each_entry_safe(u, next, &gc_inflight_list, link) { |
291 | int total_refs; | 291 | long total_refs; |
292 | int inflight_refs; | 292 | long inflight_refs; |
293 | 293 | ||
294 | total_refs = file_count(u->sk.sk_socket->file); | 294 | total_refs = file_count(u->sk.sk_socket->file); |
295 | inflight_refs = atomic_read(&u->inflight); | 295 | inflight_refs = atomic_long_read(&u->inflight); |
296 | 296 | ||
297 | BUG_ON(inflight_refs < 1); | 297 | BUG_ON(inflight_refs < 1); |
298 | BUG_ON(total_refs < inflight_refs); | 298 | BUG_ON(total_refs < inflight_refs); |
@@ -324,7 +324,7 @@ void unix_gc(void) | |||
324 | /* Move cursor to after the current position. */ | 324 | /* Move cursor to after the current position. */ |
325 | list_move(&cursor, &u->link); | 325 | list_move(&cursor, &u->link); |
326 | 326 | ||
327 | if (atomic_read(&u->inflight) > 0) { | 327 | if (atomic_long_read(&u->inflight) > 0) { |
328 | list_move_tail(&u->link, &gc_inflight_list); | 328 | list_move_tail(&u->link, &gc_inflight_list); |
329 | u->gc_candidate = 0; | 329 | u->gc_candidate = 0; |
330 | scan_children(&u->sk, inc_inflight_move_tail, NULL); | 330 | scan_children(&u->sk, inc_inflight_move_tail, NULL); |