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: Ying Xue <ying.xue@windriver.com> Acked-by: Veaceslav Falico <vfalico@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
bdffbb8e26
commit
0917b9334b
@@ -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))
|
if (!ns_capable(net->user_ns, CAP_NET_ADMIN))
|
||||||
return -EPERM;
|
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);
|
pr_debug("slave_dev=%p:\n", slave_dev);
|
||||||
|
|
||||||
if (!slave_dev)
|
if (!slave_dev)
|
||||||
res = -ENODEV;
|
return -ENODEV;
|
||||||
else {
|
|
||||||
pr_debug("slave_dev->name=%s:\n", slave_dev->name);
|
pr_debug("slave_dev->name=%s:\n", slave_dev->name);
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
case BOND_ENSLAVE_OLD:
|
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;
|
res = -EOPNOTSUPP;
|
||||||
}
|
}
|
||||||
|
|
||||||
dev_put(slave_dev);
|
|
||||||
}
|
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user