aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
Diffstat (limited to 'net')
-rw-r--r--net/ipv4/tcp_ipv4.c41
1 files changed, 7 insertions, 34 deletions
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
index c50dd1793643..840346b390d7 100644
--- a/net/ipv4/tcp_ipv4.c
+++ b/net/ipv4/tcp_ipv4.c
@@ -2211,46 +2211,19 @@ static void tcp_seq_stop(struct seq_file *seq, void *v)
2211static int tcp_seq_open(struct inode *inode, struct file *file) 2211static int tcp_seq_open(struct inode *inode, struct file *file)
2212{ 2212{
2213 struct tcp_seq_afinfo *afinfo = PDE(inode)->data; 2213 struct tcp_seq_afinfo *afinfo = PDE(inode)->data;
2214 struct seq_file *seq;
2215 struct tcp_iter_state *s; 2214 struct tcp_iter_state *s;
2216 struct net *net; 2215 int err;
2217 int rc;
2218 2216
2219 if (unlikely(afinfo == NULL)) 2217 if (unlikely(afinfo == NULL))
2220 return -EINVAL; 2218 return -EINVAL;
2221 2219
2222 s = kzalloc(sizeof(*s), GFP_KERNEL); 2220 err = seq_open_net(inode, file, &afinfo->seq_ops,
2223 if (!s) 2221 sizeof(struct tcp_iter_state));
2224 return -ENOMEM; 2222 if (err < 0)
2225 2223 return err;
2226 rc = -ENXIO;
2227 net = get_proc_net(inode);
2228 if (!net)
2229 goto out_kfree;
2230 2224
2225 s = ((struct seq_file *)file->private_data)->private;
2231 s->family = afinfo->family; 2226 s->family = afinfo->family;
2232 s->p.net = net;
2233
2234 rc = seq_open(file, &afinfo->seq_ops);
2235 if (rc)
2236 goto out_put_net;
2237 seq = file->private_data;
2238 seq->private = s;
2239out:
2240 return rc;
2241out_put_net:
2242 put_net(net);
2243out_kfree:
2244 kfree(s);
2245 goto out;
2246}
2247
2248static int tcp_seq_release(struct inode *inode, struct file *file)
2249{
2250 struct seq_file *seq = file->private_data;
2251
2252 put_net(seq_file_net(seq));
2253 seq_release_private(inode, file);
2254 return 0; 2227 return 0;
2255} 2228}
2256 2229
@@ -2263,7 +2236,7 @@ int tcp_proc_register(struct net *net, struct tcp_seq_afinfo *afinfo)
2263 afinfo->seq_fops->open = tcp_seq_open; 2236 afinfo->seq_fops->open = tcp_seq_open;
2264 afinfo->seq_fops->read = seq_read; 2237 afinfo->seq_fops->read = seq_read;
2265 afinfo->seq_fops->llseek = seq_lseek; 2238 afinfo->seq_fops->llseek = seq_lseek;
2266 afinfo->seq_fops->release = tcp_seq_release; 2239 afinfo->seq_fops->release = seq_release_net;
2267 2240
2268 afinfo->seq_ops.start = tcp_seq_start; 2241 afinfo->seq_ops.start = tcp_seq_start;
2269 afinfo->seq_ops.next = tcp_seq_next; 2242 afinfo->seq_ops.next = tcp_seq_next;