Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ae22120a authored by Denis V. Lunev's avatar Denis V. Lunev Committed by David S. Miller
Browse files

[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: default avatarDenis V. Lunev <den@openvz.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent e5d69b9f
Loading
Loading
Loading
Loading
+5 −37
Original line number Diff line number Diff line
@@ -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