diff options
author | Christoph Hellwig <hch@lst.de> | 2018-04-10 13:53:58 -0400 |
---|---|---|
committer | Christoph Hellwig <hch@lst.de> | 2018-05-16 01:24:30 -0400 |
commit | 2ad17b1950cb823f8dc820da801c4e5d7eef8113 (patch) | |
tree | a5f46c3917924502763d7ba307732b5f412aae96 | |
parent | ad08978ab41c38edb9c162ba5e3ebc30f69191d6 (diff) |
net/kcm: simplify proc registration
Remove a couple indirections to make the code look like most other
protocols.
Signed-off-by: Christoph Hellwig <hch@lst.de>
-rw-r--r-- | net/kcm/kcmproc.c | 71 |
1 files changed, 17 insertions, 54 deletions
diff --git a/net/kcm/kcmproc.c b/net/kcm/kcmproc.c index 1fac92543094..6d0667e62baf 100644 --- a/net/kcm/kcmproc.c +++ b/net/kcm/kcmproc.c | |||
@@ -15,12 +15,6 @@ | |||
15 | #include <net/tcp.h> | 15 | #include <net/tcp.h> |
16 | 16 | ||
17 | #ifdef CONFIG_PROC_FS | 17 | #ifdef CONFIG_PROC_FS |
18 | struct kcm_seq_muxinfo { | ||
19 | char *name; | ||
20 | const struct file_operations *seq_fops; | ||
21 | const struct seq_operations seq_ops; | ||
22 | }; | ||
23 | |||
24 | static struct kcm_mux *kcm_get_first(struct seq_file *seq) | 18 | static struct kcm_mux *kcm_get_first(struct seq_file *seq) |
25 | { | 19 | { |
26 | struct net *net = seq_file_net(seq); | 20 | struct net *net = seq_file_net(seq); |
@@ -86,14 +80,6 @@ struct kcm_proc_mux_state { | |||
86 | int idx; | 80 | int idx; |
87 | }; | 81 | }; |
88 | 82 | ||
89 | static int kcm_seq_open(struct inode *inode, struct file *file) | ||
90 | { | ||
91 | struct kcm_seq_muxinfo *muxinfo = PDE_DATA(inode); | ||
92 | |||
93 | return seq_open_net(inode, file, &muxinfo->seq_ops, | ||
94 | sizeof(struct kcm_proc_mux_state)); | ||
95 | } | ||
96 | |||
97 | static void kcm_format_mux_header(struct seq_file *seq) | 83 | static void kcm_format_mux_header(struct seq_file *seq) |
98 | { | 84 | { |
99 | struct net *net = seq_file_net(seq); | 85 | struct net *net = seq_file_net(seq); |
@@ -246,6 +232,19 @@ static int kcm_seq_show(struct seq_file *seq, void *v) | |||
246 | return 0; | 232 | return 0; |
247 | } | 233 | } |
248 | 234 | ||
235 | static const struct seq_operations kcm_seq_ops = { | ||
236 | .show = kcm_seq_show, | ||
237 | .start = kcm_seq_start, | ||
238 | .next = kcm_seq_next, | ||
239 | .stop = kcm_seq_stop, | ||
240 | }; | ||
241 | |||
242 | static int kcm_seq_open(struct inode *inode, struct file *file) | ||
243 | { | ||
244 | return seq_open_net(inode, file, &kcm_seq_ops, | ||
245 | sizeof(struct kcm_proc_mux_state)); | ||
246 | } | ||
247 | |||
249 | static const struct file_operations kcm_seq_fops = { | 248 | static const struct file_operations kcm_seq_fops = { |
250 | .open = kcm_seq_open, | 249 | .open = kcm_seq_open, |
251 | .read = seq_read, | 250 | .read = seq_read, |
@@ -253,37 +252,6 @@ static const struct file_operations kcm_seq_fops = { | |||
253 | .release = seq_release_net, | 252 | .release = seq_release_net, |
254 | }; | 253 | }; |
255 | 254 | ||
256 | static struct kcm_seq_muxinfo kcm_seq_muxinfo = { | ||
257 | .name = "kcm", | ||
258 | .seq_fops = &kcm_seq_fops, | ||
259 | .seq_ops = { | ||
260 | .show = kcm_seq_show, | ||
261 | .start = kcm_seq_start, | ||
262 | .next = kcm_seq_next, | ||
263 | .stop = kcm_seq_stop, | ||
264 | } | ||
265 | }; | ||
266 | |||
267 | static int kcm_proc_register(struct net *net, struct kcm_seq_muxinfo *muxinfo) | ||
268 | { | ||
269 | struct proc_dir_entry *p; | ||
270 | int rc = 0; | ||
271 | |||
272 | p = proc_create_data(muxinfo->name, 0444, net->proc_net, | ||
273 | muxinfo->seq_fops, muxinfo); | ||
274 | if (!p) | ||
275 | rc = -ENOMEM; | ||
276 | return rc; | ||
277 | } | ||
278 | EXPORT_SYMBOL(kcm_proc_register); | ||
279 | |||
280 | static void kcm_proc_unregister(struct net *net, | ||
281 | struct kcm_seq_muxinfo *muxinfo) | ||
282 | { | ||
283 | remove_proc_entry(muxinfo->name, net->proc_net); | ||
284 | } | ||
285 | EXPORT_SYMBOL(kcm_proc_unregister); | ||
286 | |||
287 | static int kcm_stats_seq_show(struct seq_file *seq, void *v) | 255 | static int kcm_stats_seq_show(struct seq_file *seq, void *v) |
288 | { | 256 | { |
289 | struct kcm_psock_stats psock_stats; | 257 | struct kcm_psock_stats psock_stats; |
@@ -404,16 +372,11 @@ static const struct file_operations kcm_stats_seq_fops = { | |||
404 | 372 | ||
405 | static int kcm_proc_init_net(struct net *net) | 373 | static int kcm_proc_init_net(struct net *net) |
406 | { | 374 | { |
407 | int err; | ||
408 | |||
409 | if (!proc_create("kcm_stats", 0444, net->proc_net, | 375 | if (!proc_create("kcm_stats", 0444, net->proc_net, |
410 | &kcm_stats_seq_fops)) { | 376 | &kcm_stats_seq_fops)) |
411 | err = -ENOMEM; | ||
412 | goto out_kcm_stats; | 377 | goto out_kcm_stats; |
413 | } | ||
414 | 378 | ||
415 | err = kcm_proc_register(net, &kcm_seq_muxinfo); | 379 | if (!proc_create("kcm", 0444, net->proc_net, &kcm_seq_fops)) |
416 | if (err) | ||
417 | goto out_kcm; | 380 | goto out_kcm; |
418 | 381 | ||
419 | return 0; | 382 | return 0; |
@@ -421,12 +384,12 @@ static int kcm_proc_init_net(struct net *net) | |||
421 | out_kcm: | 384 | out_kcm: |
422 | remove_proc_entry("kcm_stats", net->proc_net); | 385 | remove_proc_entry("kcm_stats", net->proc_net); |
423 | out_kcm_stats: | 386 | out_kcm_stats: |
424 | return err; | 387 | return -ENOMEM; |
425 | } | 388 | } |
426 | 389 | ||
427 | static void kcm_proc_exit_net(struct net *net) | 390 | static void kcm_proc_exit_net(struct net *net) |
428 | { | 391 | { |
429 | kcm_proc_unregister(net, &kcm_seq_muxinfo); | 392 | remove_proc_entry("kcm", net->proc_net); |
430 | remove_proc_entry("kcm_stats", net->proc_net); | 393 | remove_proc_entry("kcm_stats", net->proc_net); |
431 | } | 394 | } |
432 | 395 | ||