Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Several cases of bug fixes in 'net' overlapping other changes in 'net-next-. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -239,19 +239,23 @@ static int ip_finish_output_gso(struct net *net, struct sock *sk,
|
||||
struct sk_buff *segs;
|
||||
int ret = 0;
|
||||
|
||||
/* common case: fragmentation of segments is not allowed,
|
||||
* or seglen is <= mtu
|
||||
/* common case: seglen is <= mtu
|
||||
*/
|
||||
if (((IPCB(skb)->flags & IPSKB_FRAG_SEGS) == 0) ||
|
||||
skb_gso_validate_mtu(skb, mtu))
|
||||
if (skb_gso_validate_mtu(skb, mtu))
|
||||
return ip_finish_output2(net, sk, skb);
|
||||
|
||||
/* Slowpath - GSO segment length is exceeding the dst MTU.
|
||||
/* Slowpath - GSO segment length exceeds the egress MTU.
|
||||
*
|
||||
* This can happen in two cases:
|
||||
* 1) TCP GRO packet, DF bit not set
|
||||
* 2) skb arrived via virtio-net, we thus get TSO/GSO skbs directly
|
||||
* from host network stack.
|
||||
* This can happen in several cases:
|
||||
* - Forwarding of a TCP GRO skb, when DF flag is not set.
|
||||
* - Forwarding of an skb that arrived on a virtualization interface
|
||||
* (virtio-net/vhost/tap) with TSO/GSO size set by other network
|
||||
* stack.
|
||||
* - Local GSO skb transmitted on an NETIF_F_TSO tunnel stacked over an
|
||||
* interface with a smaller MTU.
|
||||
* - Arriving GRO skb (or GSO skb in a virtualized environment) that is
|
||||
* bridged to a NETIF_F_TSO tunnel stacked over an interface with an
|
||||
* insufficent MTU.
|
||||
*/
|
||||
features = netif_skb_features(skb);
|
||||
BUILD_BUG_ON(sizeof(*IPCB(skb)) > SKB_SGO_CB_OFFSET);
|
||||
@@ -1579,7 +1583,8 @@ void ip_send_unicast_reply(struct sock *sk, struct sk_buff *skb,
|
||||
}
|
||||
|
||||
oif = arg->bound_dev_if;
|
||||
oif = oif ? : skb->skb_iif;
|
||||
if (!oif && netif_index_is_l3_master(net, skb->skb_iif))
|
||||
oif = skb->skb_iif;
|
||||
|
||||
flowi4_init_output(&fl4, oif,
|
||||
IP4_REPLY_MARK(net, skb->mark),
|
||||
|
Reference in New Issue
Block a user