Commit 606c2175 authored by Andrey Shvetsov's avatar Andrey Shvetsov Committed by Greg Kroah-Hartman
Browse files

staging: most: net: make net device lifetime obvious



The function aim_probe_channel calls only one of the functions
alloc_netdev and register_netdev per run.

Correspondingly, the function aim_disconnect_channel calls only one of
the functions unregister_netdev and free_netdev per run.

This patch makes it obvious by using the 'else' part of the 'if'
statement.

Signed-off-by: default avatarAndrey Shvetsov <andrey.shvetsov@k2l.de>
Signed-off-by: default avatarChristian Gromm <christian.gromm@microchip.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 3c1746ed
Loading
Loading
Loading
Loading
+25 −22
Original line number Diff line number Diff line
@@ -287,6 +287,7 @@ static int aim_probe_channel(struct most_interface *iface, int channel_idx,
{
	struct net_dev_context *nd;
	struct net_dev_channel *ch;
	struct net_device *dev;
	unsigned long flags;

	if (!iface)
@@ -298,8 +299,6 @@ static int aim_probe_channel(struct most_interface *iface, int channel_idx,
	nd = get_net_dev_context(iface);

	if (!nd) {
		struct net_device *dev;

		dev = alloc_netdev(sizeof(struct net_dev_context), "meth%d",
				   NET_NAME_UNKNOWN, most_nd_setup);
		if (!dev)
@@ -312,21 +311,25 @@ static int aim_probe_channel(struct most_interface *iface, int channel_idx,
		spin_lock_irqsave(&list_lock, flags);
		list_add(&nd->list, &net_devices);
		spin_unlock_irqrestore(&list_lock, flags);
	}

		ch = ccfg->direction == MOST_CH_TX ? &nd->tx : &nd->rx;
		ch->ch_id = channel_idx;
		ch->linked = true;
	} else {
		ch = ccfg->direction == MOST_CH_TX ? &nd->tx : &nd->rx;
		if (ch->linked) {
		pr_err("only one channel per instance & direction allowed\n");
			pr_err("direction is allocated\n");
			return -EINVAL;
		}

		ch->ch_id = channel_idx;
		ch->linked = true;
	if (nd->tx.linked && nd->rx.linked && register_netdev(nd->dev)) {
		if (register_netdev(nd->dev)) {
			pr_err("register_netdev() failed\n");
			ch->linked = false;
			return -EINVAL;
		}
	}

	return 0;
}
@@ -349,18 +352,18 @@ static int aim_disconnect_channel(struct most_interface *iface,
	else
		return -EINVAL;

	if (nd->rx.linked && nd->tx.linked) {
		/*
		 * do not call most_stop_channel() here, because channels are
		 * going to be closed in ndo_stop() after unregister_netdev()
		 */
	if (nd->rx.linked && nd->tx.linked)
		unregister_netdev(nd->dev);

		ch->linked = false;
	if (!nd->rx.linked && !nd->tx.linked) {
	} else {
		spin_lock_irqsave(&list_lock, flags);
		list_del(&nd->list);
		spin_unlock_irqrestore(&list_lock, flags);

		free_netdev(nd->dev);
	}