diff options
Diffstat (limited to 'drivers/net/ixgbe/ixgbe_main.c')
-rw-r--r-- | drivers/net/ixgbe/ixgbe_main.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/ixgbe/ixgbe_main.c index e86297b3273..e1fcc958927 100644 --- a/drivers/net/ixgbe/ixgbe_main.c +++ b/drivers/net/ixgbe/ixgbe_main.c | |||
@@ -1321,8 +1321,8 @@ static void ixgbe_clean_rx_irq(struct ixgbe_q_vector *q_vector, | |||
1321 | if (ring_is_rsc_enabled(rx_ring)) | 1321 | if (ring_is_rsc_enabled(rx_ring)) |
1322 | pkt_is_rsc = ixgbe_get_rsc_state(rx_desc); | 1322 | pkt_is_rsc = ixgbe_get_rsc_state(rx_desc); |
1323 | 1323 | ||
1324 | /* if this is a skb from previous receive DMA will be 0 */ | 1324 | /* linear means we are building an skb from multiple pages */ |
1325 | if (rx_buffer_info->dma) { | 1325 | if (!skb_is_nonlinear(skb)) { |
1326 | u16 hlen; | 1326 | u16 hlen; |
1327 | if (pkt_is_rsc && | 1327 | if (pkt_is_rsc && |
1328 | !(staterr & IXGBE_RXD_STAT_EOP) && | 1328 | !(staterr & IXGBE_RXD_STAT_EOP) && |
@@ -1459,8 +1459,10 @@ static void ixgbe_clean_rx_irq(struct ixgbe_q_vector *q_vector, | |||
1459 | if (ixgbe_rx_is_fcoe(adapter, rx_desc)) { | 1459 | if (ixgbe_rx_is_fcoe(adapter, rx_desc)) { |
1460 | ddp_bytes = ixgbe_fcoe_ddp(adapter, rx_desc, skb, | 1460 | ddp_bytes = ixgbe_fcoe_ddp(adapter, rx_desc, skb, |
1461 | staterr); | 1461 | staterr); |
1462 | if (!ddp_bytes) | 1462 | if (!ddp_bytes) { |
1463 | dev_kfree_skb_any(skb); | ||
1463 | goto next_desc; | 1464 | goto next_desc; |
1465 | } | ||
1464 | } | 1466 | } |
1465 | #endif /* IXGBE_FCOE */ | 1467 | #endif /* IXGBE_FCOE */ |
1466 | ixgbe_receive_skb(q_vector, skb, staterr, rx_ring, rx_desc); | 1468 | ixgbe_receive_skb(q_vector, skb, staterr, rx_ring, rx_desc); |