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

Commit 0917b933 authored by Ying Xue's avatar Ying Xue Committed by David S. Miller
Browse files

bonding: use __dev_get_by_name instead of dev_get_by_name to find interface



The following call chain indicates that bond_do_ioctl() is protected
under rtnl_lock. If we use __dev_get_by_name() instead of
dev_get_by_name() to find interface handler in it, this would
help us avoid to change reference counter of interface once.

dev_ioctl()
  rtnl_lock()
  dev_ifsioc()
    bond_do_ioctl()
  rtnl_unlock()

Additionally we also change the coding style in bond_do_ioctl(),
letting it more readable for us.

Cc: Jay Vosburgh <fubar@us.ibm.com>
Cc: Veaceslav Falico <vfalico@redhat.com>
Signed-off-by: default avatarYing Xue <ying.xue@windriver.com>
Acked-by: default avatarVeaceslav Falico <vfalico@redhat.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent bdffbb8e
Loading
Loading
Loading
Loading
+23 −26
Original line number Diff line number Diff line
@@ -3213,13 +3213,13 @@ static int bond_do_ioctl(struct net_device *bond_dev, struct ifreq *ifr, int cmd
	if (!ns_capable(net->user_ns, CAP_NET_ADMIN))
		return -EPERM;

	slave_dev = dev_get_by_name(net, ifr->ifr_slave);
	slave_dev = __dev_get_by_name(net, ifr->ifr_slave);

	pr_debug("slave_dev=%p:\n", slave_dev);

	if (!slave_dev)
		res = -ENODEV;
	else {
		return -ENODEV;

	pr_debug("slave_dev->name=%s:\n", slave_dev->name);
	switch (cmd) {
	case BOND_ENSLAVE_OLD:
@@ -3243,9 +3243,6 @@ static int bond_do_ioctl(struct net_device *bond_dev, struct ifreq *ifr, int cmd
		res = -EOPNOTSUPP;
	}

		dev_put(slave_dev);
	}

	return res;
}