Commit c384b8a7 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by David S. Miller
Browse files

ipv4: streamline ipmr_new_tunnel



Reduce a few level of indentation to simplify the function.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent befb270f
Loading
Loading
Loading
Loading
+36 −37
Original line number Diff line number Diff line
@@ -471,17 +471,16 @@ static bool ipmr_init_vif_indev(const struct net_device *dev)

static struct net_device *ipmr_new_tunnel(struct net *net, struct vifctl *v)
{
	struct net_device  *dev;

	dev = __dev_get_by_name(net, "tunl0");

	if (dev) {
		const struct net_device_ops *ops = dev->netdev_ops;
		int err;
	struct net_device *tunnel_dev, *new_dev;
	struct ip_tunnel_parm p = { };
	mm_segment_t oldfs = get_fs();
	struct ifreq ifr;
		struct ip_tunnel_parm p;
	int err;

	tunnel_dev = __dev_get_by_name(net, "tunl0");
	if (!tunnel_dev)
		goto out;

		memset(&p, 0, sizeof(p));
	p.iph.daddr = v->vifc_rmt_addr.s_addr;
	p.iph.saddr = v->vifc_lcl_addr.s_addr;
	p.iph.version = 4;
@@ -490,31 +489,31 @@ static struct net_device *ipmr_new_tunnel(struct net *net, struct vifctl *v)
	sprintf(p.name, "dvmrp%d", v->vifc_vifi);
	ifr.ifr_ifru.ifru_data = (__force void __user *)&p;

		if (ops->ndo_do_ioctl) {
			mm_segment_t oldfs = get_fs();
	if (!tunnel_dev->netdev_ops->ndo_do_ioctl)
		goto out;

	set_fs(KERNEL_DS);
			err = ops->ndo_do_ioctl(dev, &ifr, SIOCADDTUNNEL);
	err = tunnel_dev->netdev_ops->ndo_do_ioctl(tunnel_dev, &ifr,
			SIOCADDTUNNEL);
	set_fs(oldfs);
		} else {
			err = -EOPNOTSUPP;
		}
		dev = NULL;
	if (err)
		goto out;

		if (err == 0 &&
		    (dev = __dev_get_by_name(net, p.name)) != NULL) {
			dev->flags |= IFF_MULTICAST;
			if (!ipmr_init_vif_indev(dev))
				goto failure;
			if (dev_open(dev, NULL))
				goto failure;
			dev_hold(dev);
		}
	}
	return dev;
	new_dev = __dev_get_by_name(net, p.name);
	if (!new_dev)
		goto out;

failure:
	unregister_netdevice(dev);
	new_dev->flags |= IFF_MULTICAST;
	if (!ipmr_init_vif_indev(new_dev))
		goto out_unregister;
	if (dev_open(new_dev, NULL))
		goto out_unregister;
	dev_hold(new_dev);
	return new_dev;

out_unregister:
	unregister_netdevice(new_dev);
out:
	return NULL;
}