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,  		if (ring_is_rsc_enabled(rx_ring))  			pkt_is_rsc = ixgbe_get_rsc_state(rx_desc); -		/* if this is a skb from previous receive DMA will be 0 */ -		if (rx_buffer_info->dma) { +		/* linear means we are building an skb from multiple pages */ +		if (!skb_is_nonlinear(skb)) {  			u16 hlen;  			if (pkt_is_rsc &&  			    !(staterr & IXGBE_RXD_STAT_EOP) && @@ -1459,8 +1459,10 @@ static void ixgbe_clean_rx_irq(struct ixgbe_q_vector *q_vector,  		if (ixgbe_rx_is_fcoe(adapter, rx_desc)) {  			ddp_bytes = ixgbe_fcoe_ddp(adapter, rx_desc, skb,  						   staterr); -			if (!ddp_bytes) +			if (!ddp_bytes) { +				dev_kfree_skb_any(skb);  				goto next_desc; +			}  		}  #endif /* IXGBE_FCOE */  		ixgbe_receive_skb(q_vector, skb, staterr, rx_ring, rx_desc);  |