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

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

Drivers: Staging: cxt1e1: use __dev_get_name instead of dev_get_name to find interfaces



The following call chain denotes that both do_reset() and do_del_chan()
are protected under rtnl_lock. If we use __dev_get_by_name() instead of
dev_get_by_name() to find interface handlers in them, this would help
us avoid to change interface reference counter.

dev_ioctl()
  rtnl_lock()
  dev_ifsioc()
    c4_ioctl()
      do_reset()
      do_del_chan()
  rtnl_unlock()

Signed-off-by: default avatarYing Xue <ying.xue@windriver.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 85a5bac9
Loading
Loading
Loading
Loading
+7 −8
Original line number Diff line number Diff line
@@ -770,9 +770,9 @@ do_del_chan (struct net_device *musycc_dev, void *data)
    if (cp.channum > 999)
        return -EINVAL;
    snprintf (buf, sizeof(buf), CHANNAME "%d", cp.channum);
    if (!(dev = dev_get_by_name (&init_net, buf)))
        return -ENOENT;
    dev_put (dev);
	dev = __dev_get_by_name(&init_net, buf);
	if (!dev)
		return -ENODEV;
    ret = do_deluser (dev, 1);
    if (ret)
        return ret;
@@ -792,7 +792,8 @@ do_reset (struct net_device *musycc_dev, void *data)
        char        buf[sizeof (CHANNAME) + 3];

        sprintf (buf, CHANNAME "%d", i);
        if (!(ndev = dev_get_by_name(&init_net, buf)))
	ndev = __dev_get_by_name(&init_net, buf);
	if (!ndev)
		continue;
        priv = dev_to_hdlc (ndev)->priv;

@@ -800,11 +801,9 @@ do_reset (struct net_device *musycc_dev, void *data)
            (unsigned long) (netdev_priv(musycc_dev)))
        {
            ndev->flags &= ~IFF_UP;
            dev_put (ndev);
            netif_stop_queue (ndev);
            do_deluser (ndev, 1);
        } else
            dev_put (ndev);
	}
    }
    return 0;
}