[TCP]: Move seq_ops from tcp_iter_state to tcp_seq_afinfo.
authorDenis V. Lunev <den@openvz.org>
Mon, 14 Apr 2008 05:12:13 +0000 (22:12 -0700)
committerDavid S. Miller <davem@davemloft.net>
Mon, 14 Apr 2008 05:12:13 +0000 (22:12 -0700)
No need to create seq_operations for each instance of 'netstat'.

Signed-off-by: Denis V. Lunev <den@openvz.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/tcp.h
net/ipv4/tcp_ipv4.c
net/ipv6/tcp_ipv6.c

index f5b61e0f01f2fecb08679b47595f83b69f9fd142..2c9a650412c0b0541fc60f309f7a80a629738736 100644 (file)
@@ -1328,8 +1328,8 @@ struct tcp_seq_afinfo {
        struct module           *owner;
        char                    *name;
        sa_family_t             family;
-       int                     (*seq_show) (struct seq_file *m, void *v);
        struct file_operations  *seq_fops;
+       struct seq_operations   seq_ops;
 };
 
 struct tcp_iter_state {
@@ -1338,7 +1338,6 @@ struct tcp_iter_state {
        enum tcp_seq_states     state;
        struct sock             *syn_wait_sk;
        int                     bucket, sbucket, num, uid;
-       struct seq_operations   seq_ops;
 };
 
 extern int tcp_proc_register(struct net *net, struct tcp_seq_afinfo *afinfo);
index 978d9db1df3498c549af4cfdc6ffa77c1ee18be0..c50dd1793643ea16db263f2b33ec6301cf03dace 100644 (file)
@@ -2229,13 +2229,9 @@ static int tcp_seq_open(struct inode *inode, struct file *file)
                goto out_kfree;
 
        s->family               = afinfo->family;
-       s->seq_ops.start        = tcp_seq_start;
-       s->seq_ops.next         = tcp_seq_next;
-       s->seq_ops.show         = afinfo->seq_show;
-       s->seq_ops.stop         = tcp_seq_stop;
        s->p.net                = net;
 
-       rc = seq_open(file, &s->seq_ops);
+       rc = seq_open(file, &afinfo->seq_ops);
        if (rc)
                goto out_put_net;
        seq = file->private_data;
@@ -2269,6 +2265,10 @@ int tcp_proc_register(struct net *net, struct tcp_seq_afinfo *afinfo)
        afinfo->seq_fops->llseek        = seq_lseek;
        afinfo->seq_fops->release       = tcp_seq_release;
 
+       afinfo->seq_ops.start           = tcp_seq_start;
+       afinfo->seq_ops.next            = tcp_seq_next;
+       afinfo->seq_ops.stop            = tcp_seq_stop;
+
        p = proc_net_fops_create(net, afinfo->name, S_IRUGO, afinfo->seq_fops);
        if (p)
                p->data = afinfo;
@@ -2414,8 +2414,10 @@ static struct tcp_seq_afinfo tcp4_seq_afinfo = {
        .owner          = THIS_MODULE,
        .name           = "tcp",
        .family         = AF_INET,
-       .seq_show       = tcp4_seq_show,
        .seq_fops       = &tcp4_seq_fops,
+       .seq_ops        = {
+               .show           = tcp4_seq_show,
+       },
 };
 
 static int tcp4_proc_init_net(struct net *net)
index 80eab71e77ff7f25af349f548b3258032bfe6645..8bf59ee51cdb4f1642edada82bd9ef1c5149ec84 100644 (file)
@@ -2125,8 +2125,10 @@ static struct tcp_seq_afinfo tcp6_seq_afinfo = {
        .owner          = THIS_MODULE,
        .name           = "tcp6",
        .family         = AF_INET6,
-       .seq_show       = tcp6_seq_show,
        .seq_fops       = &tcp6_seq_fops,
+       .seq_ops        = {
+               .show           = tcp6_seq_show,
+       },
 };
 
 int tcp6_proc_init(struct net *net)