wext: fix get_wireless_stats locking
[platform/kernel/linux-starfive.git] / net / wireless / wext.c
index e49a2d1..dc5b47e 100644 (file)
@@ -649,14 +649,28 @@ static int wireless_seq_show(struct seq_file *seq, void *v)
        return 0;
 }
 
+static void *wireless_dev_seq_start(struct seq_file *seq, loff_t *pos)
+       __acquires(dev_base_lock)
+{
+       rtnl_lock();
+       return dev_seq_start(seq, pos);
+}
+
+static void wireless_dev_seq_stop(struct seq_file *seq, void *v)
+       __releases(dev_base_lock)
+{
+       dev_seq_stop(seq, v);
+       rtnl_unlock();
+}
+
 static const struct seq_operations wireless_seq_ops = {
-       .start = dev_seq_start,
+       .start = wireless_dev_seq_start,
        .next  = dev_seq_next,
-       .stop  = dev_seq_stop,
+       .stop  = wireless_dev_seq_stop,
        .show  = wireless_seq_show,
 };
 
-static int wireless_seq_open(struct inode *inode, struct file *file)
+static int seq_open_wireless(struct inode *inode, struct file *file)
 {
        return seq_open_net(inode, file, &wireless_seq_ops,
                            sizeof(struct seq_net_private));
@@ -664,7 +678,7 @@ static int wireless_seq_open(struct inode *inode, struct file *file)
 
 static const struct file_operations wireless_seq_fops = {
        .owner   = THIS_MODULE,
-       .open    = wireless_seq_open,
+       .open    = seq_open_wireless,
        .read    = seq_read,
        .llseek  = seq_lseek,
        .release = seq_release_net,
@@ -1055,8 +1069,8 @@ static int wireless_process_ioctl(struct net *net, struct ifreq *ifr,
                        return private(dev, iwr, cmd, info, handler);
        }
        /* Old driver API : call driver ioctl handler */
-       if (dev->do_ioctl)
-               return dev->do_ioctl(dev, ifr, cmd);
+       if (dev->netdev_ops->ndo_do_ioctl)
+               return dev->netdev_ops->ndo_do_ioctl(dev, ifr, cmd);
        return -EOPNOTSUPP;
 }