Assume the following: A host joins in 2 VLANs (VLAN ID 10 and 20) via eth0, eth0.10 and eth0.20. All the participants of VLAN 10 are equipped with 16K Jumbo-frame capable NICs, while some in VLAN 20 have good old 1500byte NICs. Thus # ifconfig eth0 mtu 16000 # ifconfig eth0.10 mtu 16000 # ifconfig eth0.20 mtu 1500 are needed. Here, all the packets which eth0.20 receives have 16K socket buffer, each of which are >90% unused. This may confuse buffer size calculations in various parts in our network stack, for example: - __tcp_grow_window does not expand the window size as physical NIC of mtu 1500 case - sk->rmem_alloc is overestimated and the rx queue get easily overflowed. (we are using 2.4 but 2.6 has same problems at a glance) These can be worked around by copying received data to a smaller socket buffer in the VLAN driver, but this requires heavy operations like kmalloc/memcpy/kfree. Other solutions we are considering are: - fake skb->truesize in VLAN case - revise all (some of?) the rx code which refer to skb->truesize to take into account the VLAN cases - others? What is the right way to solve this problem? Any ideas? -- Minoura Makoto <minoura@xxxxxxxxxxxxx> Engineering Dept., VA Linux Systems Japan - : send the line "unsubscribe linux-net" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html