|
@@ -1120,7 +1120,6 @@ cxgb_fcoe_offload(struct sk_buff *skb, struct adapter *adap,
|
|
|
*/
|
|
|
netdev_tx_t t4_eth_xmit(struct sk_buff *skb, struct net_device *dev)
|
|
|
{
|
|
|
- int len;
|
|
|
u32 wr_mid;
|
|
|
u64 cntrl, *end;
|
|
|
int qidx, credits;
|
|
@@ -1133,6 +1132,7 @@ netdev_tx_t t4_eth_xmit(struct sk_buff *skb, struct net_device *dev)
|
|
|
const struct skb_shared_info *ssi;
|
|
|
dma_addr_t addr[MAX_SKB_FRAGS + 1];
|
|
|
bool immediate = false;
|
|
|
+ int len, max_pkt_len;
|
|
|
#ifdef CONFIG_CHELSIO_T4_FCOE
|
|
|
int err;
|
|
|
#endif /* CONFIG_CHELSIO_T4_FCOE */
|
|
@@ -1146,6 +1146,13 @@ out_free: dev_kfree_skb_any(skb);
|
|
|
return NETDEV_TX_OK;
|
|
|
}
|
|
|
|
|
|
+ /* Discard the packet if the length is greater than mtu */
|
|
|
+ max_pkt_len = ETH_HLEN + dev->mtu;
|
|
|
+ if (skb_vlan_tag_present(skb))
|
|
|
+ max_pkt_len += VLAN_HLEN;
|
|
|
+ if (!skb_shinfo(skb)->gso_size && (unlikely(skb->len > max_pkt_len)))
|
|
|
+ goto out_free;
|
|
|
+
|
|
|
pi = netdev_priv(dev);
|
|
|
adap = pi->adapter;
|
|
|
qidx = skb_get_queue_mapping(skb);
|