android_kernel_samsung_msm8976/net/core
John Fastabend 2425717b27 net: allow vlan traffic to be received under bond
The following configuration used to work as I expected. At least
we could use the fcoe interfaces to do MPIO and the bond0 iface
to do load balancing or failover.

       ---eth2.228-fcoe
       |
eth2 -----|
          |
          |---- bond0
          |
eth3 -----|
       |
       ---eth3.228-fcoe

This worked because of a change we added to allow inactive slaves
to rx 'exact' matches. This functionality was kept intact with the
rx_handler mechanism. However now the vlan interface attached to the
active slave never receives traffic because the bonding rx_handler
updates the skb->dev and goto's another_round. Previously, the
vlan_do_receive() logic was called before the bonding rx_handler.

Now by the time vlan_do_receive calls vlan_find_dev() the
skb->dev is set to bond0 and it is clear no vlan is attached
to this iface. The vlan lookup fails.

This patch moves the VLAN check above the rx_handler. A VLAN
tagged frame is now routed to the eth2.228-fcoe iface in the
above schematic. Untagged frames continue to the bond0 as
normal. This case also remains intact,

eth2 --> bond0 --> vlan.228

Here the skb is VLAN tagged but the vlan lookup fails on eth2
causing the bonding rx_handler to be called. On the second
pass the vlan lookup is on the bond0 iface and completes as
expected.

Putting a VLAN.228 on both the bond0 and eth2 device will
result in eth2.228 receiving the skb. I don't think this is
completely unexpected and was the result prior to the rx_handler
result.

Note, the same setup is also used for other storage traffic that
MPIO is used with eg. iSCSI and similar setups can be contrived
without storage protocols.

Signed-off-by: John Fastabend <john.r.fastabend@intel.com>
Acked-by: Jesse Gross <jesse@nicira.com>
Reviewed-by: Jiri Pirko <jpirko@redhat.com>
Tested-by: Hans Schillstrom <hams.schillstrom@ericsson.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2011-10-18 23:46:46 -04:00
..
datagram.c net: convert core to skb paged frag APIs 2011-08-24 17:52:11 -07:00
dev.c net: allow vlan traffic to be received under bond 2011-10-18 23:46:46 -04:00
dev_addr_lists.c net: remove ndo_set_multicast_list callback 2011-08-17 20:22:03 -07:00
drop_monitor.c
dst.c net: fix potential neighbour race in dst_ifdown() 2011-08-09 21:47:14 -07:00
ethtool.c net: consolidate and fix ethtool_ops->get_settings calling 2011-09-15 17:32:26 -04:00
fib_rules.c Merge branch 'master' of github.com:davem330/net 2011-09-22 03:23:13 -04:00
filter.c rcu: convert uses of rcu_assign_pointer(x, NULL) to RCU_INIT_POINTER 2011-08-02 04:29:23 -07:00
flow.c net/flow: Fix potential memory leak 2011-10-17 19:18:42 -04:00
gen_estimator.c
gen_stats.c
iovec.c
kmap_skb.h net: convert core to skb paged frag APIs 2011-08-24 17:52:11 -07:00
link_watch.c net: linkwatch: allow vlans to get carrier changes faster 2011-09-15 15:36:34 -04:00
Makefile net: Compute protocol sequence numbers and fragment IDs using MD5. 2011-08-06 18:33:19 -07:00
neighbour.c Merge branch 'master' of github.com:davem330/net 2011-09-22 03:23:13 -04:00
net-sysfs.c net: consolidate and fix ethtool_ops->get_settings calling 2011-09-15 17:32:26 -04:00
net-sysfs.h
net-traces.c
net_namespace.c
netevent.c
netpoll.c Merge branch 'master' of github.com:davem330/net 2011-09-22 03:23:13 -04:00
pktgen.c net: convert core to skb paged frag APIs 2011-08-24 17:52:11 -07:00
request_sock.c
rtnetlink.c if_link: Add additional parameter to IFLA_VF_INFO for spoof checking 2011-10-16 13:15:38 -07:00
scm.c af_unix: dont send SCM_CREDENTIALS by default 2011-09-28 13:29:50 -04:00
secure_seq.c net: Compute protocol sequence numbers and fragment IDs using MD5. 2011-08-06 18:33:19 -07:00
skbuff.c net: more accurate skb truesize 2011-10-13 16:05:07 -04:00
sock.c net: more accurate skb truesize 2011-10-13 16:05:07 -04:00
stream.c
sysctl_net_core.c
timestamping.c
user_dma.c net: convert core to skb paged frag APIs 2011-08-24 17:52:11 -07:00
utils.c