aboutsummaryrefslogtreecommitdiffstats
path: root/net/atm
diff options
context:
space:
mode:
authorDenis V. Lunev <den@openvz.org>2008-01-10 06:52:35 -0500
committerDavid S. Miller <davem@davemloft.net>2008-01-28 18:01:36 -0500
commitae22120ad846399f6aa19c5b32f8d4c7bd068fd1 (patch)
tree578eb44774b29cbb740005d59d5d29115ccbc3ef /net/atm
parente5d69b9f4a6ce17f0d09595da45e37b870fee5ae (diff)
[ATM]: Simplify /proc/net/atm/arp opening
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>
Diffstat (limited to 'net/atm')
-rw-r--r--net/atm/clip.c42
1 files changed, 5 insertions, 37 deletions
diff --git a/net/atm/clip.c b/net/atm/clip.c
index df7d218a6827..45e08620c8ca 100644
--- a/net/atm/clip.c
+++ b/net/atm/clip.c
@@ -903,6 +903,8 @@ static void *clip_seq_sub_iter(struct neigh_seq_state *_state,
903 903
904static void *clip_seq_start(struct seq_file *seq, loff_t * pos) 904static void *clip_seq_start(struct seq_file *seq, loff_t * pos)
905{ 905{
906 struct clip_seq_state *state = seq->private;
907 state->ns.neigh_sub_iter = clip_seq_sub_iter;
906 return neigh_seq_start(seq, pos, &clip_tbl, NEIGH_SEQ_NEIGH_ONLY); 908 return neigh_seq_start(seq, pos, &clip_tbl, NEIGH_SEQ_NEIGH_ONLY);
907} 909}
908 910
@@ -932,49 +934,15 @@ static const struct seq_operations arp_seq_ops = {
932 934
933static int arp_seq_open(struct inode *inode, struct file *file) 935static int arp_seq_open(struct inode *inode, struct file *file)
934{ 936{
935 struct clip_seq_state *state; 937 return seq_open_net(inode, file, &arp_seq_ops,
936 struct seq_file *seq; 938 sizeof(struct clip_seq_state));
937 int rc = -EAGAIN;
938
939 state = kzalloc(sizeof(*state), GFP_KERNEL);
940 if (!state) {
941 rc = -ENOMEM;
942 goto out_kfree;
943 }
944 state->ns.neigh_sub_iter = clip_seq_sub_iter;
945
946 rc = seq_open(file, &arp_seq_ops);
947 if (rc)
948 goto out_kfree;
949
950 seq = file->private_data;
951 seq->private = state;
952 state->ns.net = get_proc_net(inode);
953 if (!state->ns.net) {
954 seq_release_private(inode, file);
955 rc = -ENXIO;
956 }
957out:
958 return rc;
959
960out_kfree:
961 kfree(state);
962 goto out;
963}
964
965static int arp_seq_release(struct inode *inode, struct file *file)
966{
967 struct seq_file *seq = file->private_data;
968 struct clip_seq_state *state = seq->private;
969 put_net(state->ns.net);
970 return seq_release_private(inode, file);
971} 939}
972 940
973static const struct file_operations arp_seq_fops = { 941static const struct file_operations arp_seq_fops = {
974 .open = arp_seq_open, 942 .open = arp_seq_open,
975 .read = seq_read, 943 .read = seq_read,
976 .llseek = seq_lseek, 944 .llseek = seq_lseek,
977 .release = arp_seq_release, 945 .release = seq_release_net,
978 .owner = THIS_MODULE 946 .owner = THIS_MODULE
979}; 947};
980#endif 948#endif