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, -- Antonio Quartulli