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

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to