* [TCP 0/6 net-2.6.26]: tcp_proc_register simplification.
@ 2008-04-08 13:28 Denis V. Lunev
2008-04-08 13:29 ` [PATCH] [TCP]: Replace struct net on tcp_iter_state with seq_net_private Denis V. Lunev
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: Denis V. Lunev @ 2008-04-08 13:28 UTC (permalink / raw)
To: David Miller; +Cc: Netdev List
I have found that tcp_proc_register looks in the same way as
udp_proc_register. So, I have ported improvements made in the commits
6f191efe48af62dd5f8917dd21d187f896cd6c81..4ad96d39a2d74c1b2e400b602da2594f5098fc26
to TCP.
Signed-off-by: Denis V. Lunev <den@openvz.org>
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH] [TCP]: Replace struct net on tcp_iter_state with seq_net_private.
2008-04-08 13:28 [TCP 0/6 net-2.6.26]: tcp_proc_register simplification Denis V. Lunev
@ 2008-04-08 13:29 ` Denis V. Lunev
2008-04-08 13:29 ` [PATCH] [TCP]: No need to check afinfo != NULL in tcp_proc_(un)register Denis V. Lunev
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Denis V. Lunev @ 2008-04-08 13:29 UTC (permalink / raw)
To: davem; +Cc: netdev, Denis V. Lunev
Signed-off-by: Denis V. Lunev <den@openvz.org>
---
include/net/tcp.h | 2 +-
net/ipv4/tcp_ipv4.c | 11 +++++------
2 files changed, 6 insertions(+), 7 deletions(-)
diff --git a/include/net/tcp.h b/include/net/tcp.h
index 723b368..f9d6b89 100644
--- a/include/net/tcp.h
+++ b/include/net/tcp.h
@@ -1329,7 +1329,7 @@ struct tcp_seq_afinfo {
};
struct tcp_iter_state {
- struct net *net;
+ struct seq_net_private p;
sa_family_t family;
enum tcp_seq_states state;
struct sock *syn_wait_sk;
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
index df89a56..fc1b505 100644
--- a/net/ipv4/tcp_ipv4.c
+++ b/net/ipv4/tcp_ipv4.c
@@ -1955,7 +1955,7 @@ static void *listening_get_next(struct seq_file *seq, void *cur)
struct hlist_node *node;
struct sock *sk = cur;
struct tcp_iter_state* st = seq->private;
- struct net *net = st->net;
+ struct net *net = seq_file_net(seq);
if (!sk) {
st->bucket = 0;
@@ -2036,7 +2036,7 @@ static void *listening_get_idx(struct seq_file *seq, loff_t *pos)
static void *established_get_first(struct seq_file *seq)
{
struct tcp_iter_state* st = seq->private;
- struct net *net = st->net;
+ struct net *net = seq_file_net(seq);
void *rc = NULL;
for (st->bucket = 0; st->bucket < tcp_hashinfo.ehash_size; ++st->bucket) {
@@ -2077,7 +2077,7 @@ static void *established_get_next(struct seq_file *seq, void *cur)
struct inet_timewait_sock *tw;
struct hlist_node *node;
struct tcp_iter_state* st = seq->private;
- struct net *net = st->net;
+ struct net *net = seq_file_net(seq);
++st->num;
@@ -2234,7 +2234,7 @@ static int tcp_seq_open(struct inode *inode, struct file *file)
s->seq_ops.next = tcp_seq_next;
s->seq_ops.show = afinfo->seq_show;
s->seq_ops.stop = tcp_seq_stop;
- s->net = net;
+ s->p.net = net;
rc = seq_open(file, &s->seq_ops);
if (rc)
@@ -2253,9 +2253,8 @@ out_kfree:
static int tcp_seq_release(struct inode *inode, struct file *file)
{
struct seq_file *seq = file->private_data;
- struct tcp_iter_state *s = seq->private;
- put_net(s->net);
+ put_net(seq_file_net(seq));
seq_release_private(inode, file);
return 0;
}
--
1.5.3.rc5
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH] [TCP]: No need to check afinfo != NULL in tcp_proc_(un)register.
2008-04-08 13:28 [TCP 0/6 net-2.6.26]: tcp_proc_register simplification Denis V. Lunev
2008-04-08 13:29 ` [PATCH] [TCP]: Replace struct net on tcp_iter_state with seq_net_private Denis V. Lunev
@ 2008-04-08 13:29 ` Denis V. Lunev
2008-04-08 13:29 ` [PATCH] [TCP]: Move seq_ops from tcp_iter_state to tcp_seq_afinfo Denis V. Lunev
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Denis V. Lunev @ 2008-04-08 13:29 UTC (permalink / raw)
To: davem; +Cc: netdev, Denis V. Lunev
tcp_proc_register/tcp_proc_unregister are called with a static pointer only.
Signed-off-by: Denis V. Lunev <den@openvz.org>
---
net/ipv4/tcp_ipv4.c | 4 ----
1 files changed, 0 insertions(+), 4 deletions(-)
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
index fc1b505..e5dd52b 100644
--- a/net/ipv4/tcp_ipv4.c
+++ b/net/ipv4/tcp_ipv4.c
@@ -2264,8 +2264,6 @@ int tcp_proc_register(struct net *net, struct tcp_seq_afinfo *afinfo)
int rc = 0;
struct proc_dir_entry *p;
- if (!afinfo)
- return -EINVAL;
afinfo->seq_fops->owner = afinfo->owner;
afinfo->seq_fops->open = tcp_seq_open;
afinfo->seq_fops->read = seq_read;
@@ -2282,8 +2280,6 @@ int tcp_proc_register(struct net *net, struct tcp_seq_afinfo *afinfo)
void tcp_proc_unregister(struct net *net, struct tcp_seq_afinfo *afinfo)
{
- if (!afinfo)
- return;
proc_net_remove(net, afinfo->name);
memset(afinfo->seq_fops, 0, sizeof(*afinfo->seq_fops));
}
--
1.5.3.rc5
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH] [TCP]: Move seq_ops from tcp_iter_state to tcp_seq_afinfo.
2008-04-08 13:28 [TCP 0/6 net-2.6.26]: tcp_proc_register simplification Denis V. Lunev
2008-04-08 13:29 ` [PATCH] [TCP]: Replace struct net on tcp_iter_state with seq_net_private Denis V. Lunev
2008-04-08 13:29 ` [PATCH] [TCP]: No need to check afinfo != NULL in tcp_proc_(un)register Denis V. Lunev
@ 2008-04-08 13:29 ` Denis V. Lunev
2008-04-08 13:29 ` [PATCH] [TCP]: Cleanup /proc/tcp[6] creation/removal Denis V. Lunev
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Denis V. Lunev @ 2008-04-08 13:29 UTC (permalink / raw)
To: davem; +Cc: netdev, Denis V. Lunev
No need to create seq_operations for each instance of 'netstat'.
Signed-off-by: Denis V. Lunev <den@openvz.org>
---
include/net/tcp.h | 3 +--
net/ipv4/tcp_ipv4.c | 14 ++++++++------
net/ipv6/tcp_ipv6.c | 4 +++-
3 files changed, 12 insertions(+), 9 deletions(-)
diff --git a/include/net/tcp.h b/include/net/tcp.h
index f9d6b89..a386bdd 100644
--- a/include/net/tcp.h
+++ b/include/net/tcp.h
@@ -1324,8 +1324,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 {
@@ -1334,7 +1334,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);
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
index e5dd52b..0d0e220 100644
--- a/net/ipv4/tcp_ipv4.c
+++ b/net/ipv4/tcp_ipv4.c
@@ -2230,13 +2230,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;
@@ -2270,6 +2266,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;
@@ -2415,8 +2415,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)
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
index 378cc40..09d9184 100644
--- a/net/ipv6/tcp_ipv6.c
+++ b/net/ipv6/tcp_ipv6.c
@@ -2126,8 +2126,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)
--
1.5.3.rc5
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH] [TCP]: Cleanup /proc/tcp[6] creation/removal.
2008-04-08 13:28 [TCP 0/6 net-2.6.26]: tcp_proc_register simplification Denis V. Lunev
` (2 preceding siblings ...)
2008-04-08 13:29 ` [PATCH] [TCP]: Move seq_ops from tcp_iter_state to tcp_seq_afinfo Denis V. Lunev
@ 2008-04-08 13:29 ` Denis V. Lunev
2008-04-08 13:29 ` [PATCH] [TCP]: Place file operations directly into tcp_seq_afinfo Denis V. Lunev
2008-04-08 13:29 ` [PATCH] [TCP]: Remove owner from tcp_seq_afinfo Denis V. Lunev
5 siblings, 0 replies; 7+ messages in thread
From: Denis V. Lunev @ 2008-04-08 13:29 UTC (permalink / raw)
To: davem; +Cc: netdev, Denis V. Lunev
Replace seq_open with seq_open_net and remove tcp_seq_release
completely. seq_release_net will do this job just fine.
Signed-off-by: Denis V. Lunev <den@openvz.org>
---
net/ipv4/tcp_ipv4.c | 41 +++++++----------------------------------
1 files changed, 7 insertions(+), 34 deletions(-)
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
index 0d0e220..287af10 100644
--- a/net/ipv4/tcp_ipv4.c
+++ b/net/ipv4/tcp_ipv4.c
@@ -2212,46 +2212,19 @@ static void tcp_seq_stop(struct seq_file *seq, void *v)
static int tcp_seq_open(struct inode *inode, struct file *file)
{
struct tcp_seq_afinfo *afinfo = PDE(inode)->data;
- struct seq_file *seq;
struct tcp_iter_state *s;
- struct net *net;
- int rc;
+ int err;
if (unlikely(afinfo == NULL))
return -EINVAL;
- s = kzalloc(sizeof(*s), GFP_KERNEL);
- if (!s)
- return -ENOMEM;
-
- rc = -ENXIO;
- net = get_proc_net(inode);
- if (!net)
- goto out_kfree;
+ err = seq_open_net(inode, file, &afinfo->seq_ops,
+ sizeof(struct tcp_iter_state));
+ if (err < 0)
+ return err;
+ s = ((struct seq_file *)file->private_data)->private;
s->family = afinfo->family;
- s->p.net = net;
-
- rc = seq_open(file, &afinfo->seq_ops);
- if (rc)
- goto out_put_net;
- seq = file->private_data;
- seq->private = s;
-out:
- return rc;
-out_put_net:
- put_net(net);
-out_kfree:
- kfree(s);
- goto out;
-}
-
-static int tcp_seq_release(struct inode *inode, struct file *file)
-{
- struct seq_file *seq = file->private_data;
-
- put_net(seq_file_net(seq));
- seq_release_private(inode, file);
return 0;
}
@@ -2264,7 +2237,7 @@ int tcp_proc_register(struct net *net, struct tcp_seq_afinfo *afinfo)
afinfo->seq_fops->open = tcp_seq_open;
afinfo->seq_fops->read = seq_read;
afinfo->seq_fops->llseek = seq_lseek;
- afinfo->seq_fops->release = tcp_seq_release;
+ afinfo->seq_fops->release = seq_release_net;
afinfo->seq_ops.start = tcp_seq_start;
afinfo->seq_ops.next = tcp_seq_next;
--
1.5.3.rc5
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH] [TCP]: Place file operations directly into tcp_seq_afinfo.
2008-04-08 13:28 [TCP 0/6 net-2.6.26]: tcp_proc_register simplification Denis V. Lunev
` (3 preceding siblings ...)
2008-04-08 13:29 ` [PATCH] [TCP]: Cleanup /proc/tcp[6] creation/removal Denis V. Lunev
@ 2008-04-08 13:29 ` Denis V. Lunev
2008-04-08 13:29 ` [PATCH] [TCP]: Remove owner from tcp_seq_afinfo Denis V. Lunev
5 siblings, 0 replies; 7+ messages in thread
From: Denis V. Lunev @ 2008-04-08 13:29 UTC (permalink / raw)
To: davem; +Cc: netdev, Denis V. Lunev
No need to have separate never-used variable.
Signed-off-by: Denis V. Lunev <den@openvz.org>
---
include/net/tcp.h | 2 +-
net/ipv4/tcp_ipv4.c | 15 ++++++---------
net/ipv6/tcp_ipv6.c | 2 --
3 files changed, 7 insertions(+), 12 deletions(-)
diff --git a/include/net/tcp.h b/include/net/tcp.h
index a386bdd..23915f3 100644
--- a/include/net/tcp.h
+++ b/include/net/tcp.h
@@ -1324,7 +1324,7 @@ struct tcp_seq_afinfo {
struct module *owner;
char *name;
sa_family_t family;
- struct file_operations *seq_fops;
+ struct file_operations seq_fops;
struct seq_operations seq_ops;
};
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
index 287af10..ebef394 100644
--- a/net/ipv4/tcp_ipv4.c
+++ b/net/ipv4/tcp_ipv4.c
@@ -2233,17 +2233,17 @@ int tcp_proc_register(struct net *net, struct tcp_seq_afinfo *afinfo)
int rc = 0;
struct proc_dir_entry *p;
- afinfo->seq_fops->owner = afinfo->owner;
- afinfo->seq_fops->open = tcp_seq_open;
- afinfo->seq_fops->read = seq_read;
- afinfo->seq_fops->llseek = seq_lseek;
- afinfo->seq_fops->release = seq_release_net;
+ afinfo->seq_fops.owner = afinfo->owner;
+ afinfo->seq_fops.open = tcp_seq_open;
+ afinfo->seq_fops.read = seq_read;
+ afinfo->seq_fops.llseek = seq_lseek;
+ afinfo->seq_fops.release = seq_release_net;
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);
+ p = proc_net_fops_create(net, afinfo->name, S_IRUGO, &afinfo->seq_fops);
if (p)
p->data = afinfo;
else
@@ -2254,7 +2254,6 @@ int tcp_proc_register(struct net *net, struct tcp_seq_afinfo *afinfo)
void tcp_proc_unregister(struct net *net, struct tcp_seq_afinfo *afinfo)
{
proc_net_remove(net, afinfo->name);
- memset(afinfo->seq_fops, 0, sizeof(*afinfo->seq_fops));
}
static void get_openreq4(struct sock *sk, struct request_sock *req,
@@ -2383,12 +2382,10 @@ out:
return 0;
}
-static struct file_operations tcp4_seq_fops;
static struct tcp_seq_afinfo tcp4_seq_afinfo = {
.owner = THIS_MODULE,
.name = "tcp",
.family = AF_INET,
- .seq_fops = &tcp4_seq_fops,
.seq_ops = {
.show = tcp4_seq_show,
},
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
index 09d9184..15c7044 100644
--- a/net/ipv6/tcp_ipv6.c
+++ b/net/ipv6/tcp_ipv6.c
@@ -2121,12 +2121,10 @@ out:
return 0;
}
-static struct file_operations tcp6_seq_fops;
static struct tcp_seq_afinfo tcp6_seq_afinfo = {
.owner = THIS_MODULE,
.name = "tcp6",
.family = AF_INET6,
- .seq_fops = &tcp6_seq_fops,
.seq_ops = {
.show = tcp6_seq_show,
},
--
1.5.3.rc5
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH] [TCP]: Remove owner from tcp_seq_afinfo.
2008-04-08 13:28 [TCP 0/6 net-2.6.26]: tcp_proc_register simplification Denis V. Lunev
` (4 preceding siblings ...)
2008-04-08 13:29 ` [PATCH] [TCP]: Place file operations directly into tcp_seq_afinfo Denis V. Lunev
@ 2008-04-08 13:29 ` Denis V. Lunev
5 siblings, 0 replies; 7+ messages in thread
From: Denis V. Lunev @ 2008-04-08 13:29 UTC (permalink / raw)
To: davem; +Cc: netdev, Denis V. Lunev
Move it to tcp_seq_afinfo->seq_fops as should be.
Signed-off-by: Denis V. Lunev <den@openvz.org>
---
include/net/tcp.h | 1 -
net/ipv4/tcp_ipv4.c | 5 +++--
net/ipv6/tcp_ipv6.c | 4 +++-
3 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/include/net/tcp.h b/include/net/tcp.h
index 23915f3..2b273c0 100644
--- a/include/net/tcp.h
+++ b/include/net/tcp.h
@@ -1321,7 +1321,6 @@ enum tcp_seq_states {
};
struct tcp_seq_afinfo {
- struct module *owner;
char *name;
sa_family_t family;
struct file_operations seq_fops;
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
index ebef394..5d11d25 100644
--- a/net/ipv4/tcp_ipv4.c
+++ b/net/ipv4/tcp_ipv4.c
@@ -2233,7 +2233,6 @@ int tcp_proc_register(struct net *net, struct tcp_seq_afinfo *afinfo)
int rc = 0;
struct proc_dir_entry *p;
- afinfo->seq_fops.owner = afinfo->owner;
afinfo->seq_fops.open = tcp_seq_open;
afinfo->seq_fops.read = seq_read;
afinfo->seq_fops.llseek = seq_lseek;
@@ -2383,9 +2382,11 @@ out:
}
static struct tcp_seq_afinfo tcp4_seq_afinfo = {
- .owner = THIS_MODULE,
.name = "tcp",
.family = AF_INET,
+ .seq_fops = {
+ .owner = THIS_MODULE,
+ },
.seq_ops = {
.show = tcp4_seq_show,
},
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
index 15c7044..9044e50 100644
--- a/net/ipv6/tcp_ipv6.c
+++ b/net/ipv6/tcp_ipv6.c
@@ -2122,9 +2122,11 @@ out:
}
static struct tcp_seq_afinfo tcp6_seq_afinfo = {
- .owner = THIS_MODULE,
.name = "tcp6",
.family = AF_INET6,
+ .seq_fops = {
+ .owner = THIS_MODULE,
+ },
.seq_ops = {
.show = tcp6_seq_show,
},
--
1.5.3.rc5
^ permalink raw reply related [flat|nested] 7+ messages in thread
end of thread, other threads:[~2008-04-08 13:29 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-04-08 13:28 [TCP 0/6 net-2.6.26]: tcp_proc_register simplification Denis V. Lunev
2008-04-08 13:29 ` [PATCH] [TCP]: Replace struct net on tcp_iter_state with seq_net_private Denis V. Lunev
2008-04-08 13:29 ` [PATCH] [TCP]: No need to check afinfo != NULL in tcp_proc_(un)register Denis V. Lunev
2008-04-08 13:29 ` [PATCH] [TCP]: Move seq_ops from tcp_iter_state to tcp_seq_afinfo Denis V. Lunev
2008-04-08 13:29 ` [PATCH] [TCP]: Cleanup /proc/tcp[6] creation/removal Denis V. Lunev
2008-04-08 13:29 ` [PATCH] [TCP]: Place file operations directly into tcp_seq_afinfo Denis V. Lunev
2008-04-08 13:29 ` [PATCH] [TCP]: Remove owner from tcp_seq_afinfo Denis V. Lunev
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).