diff options
Diffstat (limited to 'net/ipv4/tcp_ipv4.c')
-rw-r--r-- | net/ipv4/tcp_ipv4.c | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index 0ea10eefa60f..a7443159c400 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c | |||
@@ -1510,6 +1510,7 @@ exit: | |||
1510 | NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_LISTENDROPS); | 1510 | NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_LISTENDROPS); |
1511 | return NULL; | 1511 | return NULL; |
1512 | put_and_exit: | 1512 | put_and_exit: |
1513 | bh_unlock_sock(newsk); | ||
1513 | sock_put(newsk); | 1514 | sock_put(newsk); |
1514 | goto exit; | 1515 | goto exit; |
1515 | } | 1516 | } |
@@ -2339,7 +2340,7 @@ static void tcp_seq_stop(struct seq_file *seq, void *v) | |||
2339 | } | 2340 | } |
2340 | } | 2341 | } |
2341 | 2342 | ||
2342 | static int tcp_seq_open(struct inode *inode, struct file *file) | 2343 | int tcp_seq_open(struct inode *inode, struct file *file) |
2343 | { | 2344 | { |
2344 | struct tcp_seq_afinfo *afinfo = PDE(inode)->data; | 2345 | struct tcp_seq_afinfo *afinfo = PDE(inode)->data; |
2345 | struct tcp_iter_state *s; | 2346 | struct tcp_iter_state *s; |
@@ -2355,23 +2356,19 @@ static int tcp_seq_open(struct inode *inode, struct file *file) | |||
2355 | s->last_pos = 0; | 2356 | s->last_pos = 0; |
2356 | return 0; | 2357 | return 0; |
2357 | } | 2358 | } |
2359 | EXPORT_SYMBOL(tcp_seq_open); | ||
2358 | 2360 | ||
2359 | int tcp_proc_register(struct net *net, struct tcp_seq_afinfo *afinfo) | 2361 | int tcp_proc_register(struct net *net, struct tcp_seq_afinfo *afinfo) |
2360 | { | 2362 | { |
2361 | int rc = 0; | 2363 | int rc = 0; |
2362 | struct proc_dir_entry *p; | 2364 | struct proc_dir_entry *p; |
2363 | 2365 | ||
2364 | afinfo->seq_fops.open = tcp_seq_open; | ||
2365 | afinfo->seq_fops.read = seq_read; | ||
2366 | afinfo->seq_fops.llseek = seq_lseek; | ||
2367 | afinfo->seq_fops.release = seq_release_net; | ||
2368 | |||
2369 | afinfo->seq_ops.start = tcp_seq_start; | 2366 | afinfo->seq_ops.start = tcp_seq_start; |
2370 | afinfo->seq_ops.next = tcp_seq_next; | 2367 | afinfo->seq_ops.next = tcp_seq_next; |
2371 | afinfo->seq_ops.stop = tcp_seq_stop; | 2368 | afinfo->seq_ops.stop = tcp_seq_stop; |
2372 | 2369 | ||
2373 | p = proc_create_data(afinfo->name, S_IRUGO, net->proc_net, | 2370 | p = proc_create_data(afinfo->name, S_IRUGO, net->proc_net, |
2374 | &afinfo->seq_fops, afinfo); | 2371 | afinfo->seq_fops, afinfo); |
2375 | if (!p) | 2372 | if (!p) |
2376 | rc = -ENOMEM; | 2373 | rc = -ENOMEM; |
2377 | return rc; | 2374 | return rc; |
@@ -2520,12 +2517,18 @@ out: | |||
2520 | return 0; | 2517 | return 0; |
2521 | } | 2518 | } |
2522 | 2519 | ||
2520 | static const struct file_operations tcp_afinfo_seq_fops = { | ||
2521 | .owner = THIS_MODULE, | ||
2522 | .open = tcp_seq_open, | ||
2523 | .read = seq_read, | ||
2524 | .llseek = seq_lseek, | ||
2525 | .release = seq_release_net | ||
2526 | }; | ||
2527 | |||
2523 | static struct tcp_seq_afinfo tcp4_seq_afinfo = { | 2528 | static struct tcp_seq_afinfo tcp4_seq_afinfo = { |
2524 | .name = "tcp", | 2529 | .name = "tcp", |
2525 | .family = AF_INET, | 2530 | .family = AF_INET, |
2526 | .seq_fops = { | 2531 | .seq_fops = &tcp_afinfo_seq_fops, |
2527 | .owner = THIS_MODULE, | ||
2528 | }, | ||
2529 | .seq_ops = { | 2532 | .seq_ops = { |
2530 | .show = tcp4_seq_show, | 2533 | .show = tcp4_seq_show, |
2531 | }, | 2534 | }, |