This is a note to let you know that I've just added the patch titled macvtap: set transport header before passing skb to lower device to the 3.9-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: macvtap-set-transport-header-before-passing-skb-to-lower-device.patch and it can be found in the queue-3.9 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let <stable@xxxxxxxxxxxxxxx> know about it. >From 6fce35d87d22ec8e666e91f7dc2a15ee0d86deeb Mon Sep 17 00:00:00 2001 From: Jason Wang <jasowang@xxxxxxxxxx> Date: Mon, 25 Mar 2013 20:19:55 +0000 Subject: macvtap: set transport header before passing skb to lower device From: Jason Wang <jasowang@xxxxxxxxxx> [ Upstream commit 9b4d669bc06c215d64f56f1eb0d4eb96e14d689d ] Set the transport header for 1) some drivers (e.g ixgbe) needs l4 header 2) precise packet length estimation (introduced in 1def9238) needs l4 header to compute header length. For the packets with partial checksum, the patch just set the transport header to csum_start. Otherwise tries to use skb_flow_dissect() to get l4 offset, if it fails, just pretend no l4 header. Signed-off-by: Jason Wang <jasowang@xxxxxxxxxx> Cc: Eric Dumazet <edumazet@xxxxxxxxxx> Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- drivers/net/macvtap.c | 9 +++++++++ 1 file changed, 9 insertions(+) --- a/drivers/net/macvtap.c +++ b/drivers/net/macvtap.c @@ -21,6 +21,7 @@ #include <net/rtnetlink.h> #include <net/sock.h> #include <linux/virtio_net.h> +#include <net/flow_keys.h> /* * A macvtap queue is the central object of this driver, it connects @@ -645,6 +646,7 @@ static ssize_t macvtap_get_user(struct m int vnet_hdr_len = 0; int copylen = 0; bool zerocopy = false; + struct flow_keys keys; if (q->flags & IFF_VNET_HDR) { vnet_hdr_len = q->vnet_hdr_sz; @@ -725,6 +727,13 @@ static ssize_t macvtap_get_user(struct m goto err_kfree; } + if (skb->ip_summed == CHECKSUM_PARTIAL) + skb_set_transport_header(skb, skb_checksum_start_offset(skb)); + else if (skb_flow_dissect(skb, &keys)) + skb_set_transport_header(skb, keys.thoff); + else + skb_set_transport_header(skb, ETH_HLEN); + rcu_read_lock_bh(); vlan = rcu_dereference_bh(q->vlan); /* copy skb_ubuf_info for callback when skb has no error */ Patches currently in stable-queue which might be from jasowang@xxxxxxxxxx are queue-3.9/tuntap-forbid-changing-mq-flag-for-persistent-device.patch queue-3.9/packet-set-transport-header-before-doing-xmit.patch queue-3.9/netback-set-transport-header-before-passing-it-to-kernel.patch queue-3.9/net_sched-better-precise-estimation-on-packet-length-for-untrusted-packets.patch queue-3.9/tuntap-set-sock_zerocopy-flag-during-open.patch queue-3.9/tuntap-set-transport-header-before-passing-it-to-kernel.patch queue-3.9/tuntap-correct-the-return-value-in-tun_set_iff.patch queue-3.9/macvtap-set-transport-header-before-passing-skb-to-lower-device.patch queue-3.9/vhost_net-clear-msg.control-for-non-zerocopy-case-during-tx.patch -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html