]> err.no Git - linux-2.6/commitdiff
[ATM]: Simplify /proc/net/atm/arp opening
authorDenis V. Lunev <den@openvz.org>
Thu, 10 Jan 2008 11:52:35 +0000 (03:52 -0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 28 Jan 2008 23:01:36 +0000 (15:01 -0800)
The iterator state->ns.neigh_sub_iter initialization is moved from
arp_seq_open to clip_seq_start for convinience. This should not be a
problem as the iterator will be used only after the seq_start
callback.

Signed-off-by: Denis V. Lunev <den@openvz.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/atm/clip.c

index df7d218a682771a59e839cb6c90b1ddc0d73934f..45e08620c8cae2f67887849c7737097a8f8493d8 100644 (file)
@@ -903,6 +903,8 @@ static void *clip_seq_sub_iter(struct neigh_seq_state *_state,
 
 static void *clip_seq_start(struct seq_file *seq, loff_t * pos)
 {
+       struct clip_seq_state *state = seq->private;
+       state->ns.neigh_sub_iter = clip_seq_sub_iter;
        return neigh_seq_start(seq, pos, &clip_tbl, NEIGH_SEQ_NEIGH_ONLY);
 }
 
@@ -932,49 +934,15 @@ static const struct seq_operations arp_seq_ops = {
 
 static int arp_seq_open(struct inode *inode, struct file *file)
 {
-       struct clip_seq_state *state;
-       struct seq_file *seq;
-       int rc = -EAGAIN;
-
-       state = kzalloc(sizeof(*state), GFP_KERNEL);
-       if (!state) {
-               rc = -ENOMEM;
-               goto out_kfree;
-       }
-       state->ns.neigh_sub_iter = clip_seq_sub_iter;
-
-       rc = seq_open(file, &arp_seq_ops);
-       if (rc)
-               goto out_kfree;
-
-       seq = file->private_data;
-       seq->private = state;
-       state->ns.net = get_proc_net(inode);
-       if (!state->ns.net) {
-               seq_release_private(inode, file);
-               rc = -ENXIO;
-       }
-out:
-       return rc;
-
-out_kfree:
-       kfree(state);
-       goto out;
-}
-
-static int arp_seq_release(struct inode *inode, struct file *file)
-{
-       struct seq_file *seq = file->private_data;
-       struct clip_seq_state *state = seq->private;
-       put_net(state->ns.net);
-       return seq_release_private(inode, file);
+       return seq_open_net(inode, file, &arp_seq_ops,
+                           sizeof(struct clip_seq_state));
 }
 
 static const struct file_operations arp_seq_fops = {
        .open           = arp_seq_open,
        .read           = seq_read,
        .llseek         = seq_lseek,
-       .release        = arp_seq_release,
+       .release        = seq_release_net,
        .owner          = THIS_MODULE
 };
 #endif