On 16/02/14 13:01, Linus Lüssing wrote:
@@ -371,12 +372,13 @@ static int __batadv_interface_tx(struct sk_buff *skb, \
#ifndef netdev_master_upper_dev_get_rcu #define netdev_master_upper_dev_get_rcu(dev) \
- NULL; \
- upper; \ if (dev->priv_flags & IFF_BRIDGE_PORT) { \ rcu_read_unlock(); \ dev_hold(dev); \ return dev; \
- }
- } else \
dev = NULL;
Following your patch the code in multicast.c will become:
172 do { 173 upper = upper; if (dev->priv_flags & IFF_BRIDGE_PORT) { rcu_read_unlock(); dev_hold(dev); return dev; } else dev = NULL; 174 } while (upper && !(upper->priv_flags & IFF_EBRIDGE));
am I wrong or this is going to break the while? I think there is a missing '}'.
What about a simplified version like this:
#define netdev_master_upper_dev_get_rcu(dev) \ - NULL; \ - if (dev->priv_flags & IFF_BRIDGE_PORT) { \ + ({if (dev->priv_flags & IFF_BRIDGE_PORT) { \ rcu_read_unlock(); \ dev_hold(dev); \ return dev; \ - } + }\ + NULL;})
Cheers,