Subject: Re: bond_compute_features() does not handle devices with different CSUM

From: Michael Buesch <[email-masked]>
Date: Wed, 30 May 2007 13:03:24 +0200

On Wednesday 30 May 2007 04:47:09 Laurent Chavey wrote:
> proposed change.
> 
> --- 2.6.20/drivers/net/bonding/bond_main.c      2007-05-29
> 19:43:39.010565000 -0700
> +++ 2.6.20.fix/drivers/net/bonding/bond_main.c  2007-05-29
> 19:46:12.376980000 -0700
> @@ -1227,7 +1227,14 @@
>         int i;
> 
>         bond_for_each_slave(bond, slave, i) {
> -               features &= (slave->dev->features & BOND_INTERSECT_FEATURES);
> +               /* NETIF_F_HW_CSUM includes support for NET_IF_IP_CSUM
> +                * as such when looking for the intersection we need to
> +                * add it to the device supported features
> +                */
> +               unsigned long dev_features = slave->dev->features;
> +               if (slave->dev->features & NETIF_F_HW_CSUM)
> +                       dev_features |= NETIF_F_IP_CSUM;

> +               features &= (features & BOND_INTERSECT_FEATURES);

Is this statement correct?
It's the same as
	features = features & (features & BOND_INTERSECT_FEATURES);
which looks strange to me.
Did you mean something like
	features |= (dev_features & BOND_INTERSECT_FEATURES);
?

-- 
Greetings Michael.