|
@@ -144,7 +144,7 @@ static inline struct net_device *bpq_get_ax25_dev(struct net_device *dev)
|
|
|
{
|
|
|
struct bpqdev *bpq;
|
|
|
|
|
|
- list_for_each_entry(bpq, &bpq_devices, bpq_list) {
|
|
|
+ list_for_each_entry_rcu(bpq, &bpq_devices, bpq_list) {
|
|
|
if (bpq->ethdev == dev)
|
|
|
return bpq->axdev;
|
|
|
}
|
|
@@ -399,7 +399,7 @@ static void *bpq_seq_start(struct seq_file *seq, loff_t *pos)
|
|
|
if (*pos == 0)
|
|
|
return SEQ_START_TOKEN;
|
|
|
|
|
|
- list_for_each_entry(bpqdev, &bpq_devices, bpq_list) {
|
|
|
+ list_for_each_entry_rcu(bpqdev, &bpq_devices, bpq_list) {
|
|
|
if (i == *pos)
|
|
|
return bpqdev;
|
|
|
}
|
|
@@ -418,7 +418,7 @@ static void *bpq_seq_next(struct seq_file *seq, void *v, loff_t *pos)
|
|
|
p = ((struct bpqdev *)v)->bpq_list.next;
|
|
|
|
|
|
return (p == &bpq_devices) ? NULL
|
|
|
- : list_entry(p, struct bpqdev, bpq_list);
|
|
|
+ : rcu_dereference(list_entry(p, struct bpqdev, bpq_list));
|
|
|
}
|
|
|
|
|
|
static void bpq_seq_stop(struct seq_file *seq, void *v)
|
|
@@ -561,8 +561,6 @@ static int bpq_device_event(struct notifier_block *this,unsigned long event, voi
|
|
|
if (!dev_is_ethdev(dev))
|
|
|
return NOTIFY_DONE;
|
|
|
|
|
|
- rcu_read_lock();
|
|
|
-
|
|
|
switch (event) {
|
|
|
case NETDEV_UP: /* new ethernet device -> new BPQ interface */
|
|
|
if (bpq_get_ax25_dev(dev) == NULL)
|
|
@@ -581,7 +579,6 @@ static int bpq_device_event(struct notifier_block *this,unsigned long event, voi
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
- rcu_read_unlock();
|
|
|
|
|
|
return NOTIFY_DONE;
|
|
|
}
|