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