|
|
@ -281,6 +281,13 @@ |
|
|
|
+ list_for_each_entry_rcu(sdata, &local->interfaces, list) {
|
|
|
|
+ list_for_each_entry_rcu(sdata, &local->interfaces, list) {
|
|
|
|
+ if (!sdata->dev)
|
|
|
|
+ if (!sdata->dev)
|
|
|
|
+ continue;
|
|
|
|
+ continue;
|
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
+ if (skb->dev != sdata->dev)
|
|
|
|
|
|
|
|
+ continue;
|
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
+ found = true;
|
|
|
|
|
|
|
|
+ break;
|
|
|
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
|
|
- p2p_sdata = rcu_dereference(local->p2p_sdata);
|
|
|
|
- p2p_sdata = rcu_dereference(local->p2p_sdata);
|
|
|
|
- if (p2p_sdata) {
|
|
|
|
- if (p2p_sdata) {
|
|
|
@ -289,18 +296,11 @@ |
|
|
|
- skb->len, acked, GFP_ATOMIC);
|
|
|
|
- skb->len, acked, GFP_ATOMIC);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- rcu_read_unlock();
|
|
|
|
- rcu_read_unlock();
|
|
|
|
+ if (skb->dev != sdata->dev)
|
|
|
|
|
|
|
|
+ continue;
|
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
+ found = true;
|
|
|
|
|
|
|
|
+ break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
+ if (!skb->dev) {
|
|
|
|
+ if (!skb->dev) {
|
|
|
|
+ sdata = rcu_dereference(local->p2p_sdata);
|
|
|
|
+ sdata = rcu_dereference(local->p2p_sdata);
|
|
|
|
+ if (sdata)
|
|
|
|
+ if (sdata)
|
|
|
|
+ found = true;
|
|
|
|
+ found = true;
|
|
|
|
+ }
|
|
|
|
}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ if (!found)
|
|
|
|
+ if (!found)
|
|
|
|
+ skb->dev = NULL;
|
|
|
|
+ skb->dev = NULL;
|
|
|
|