Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1241e951 authored by Ben Hutchings's avatar Ben Hutchings Committed by David S. Miller
Browse files

sfc: Move assertions and buffer cleanup earlier in efx_rx_packet_lro()



This removes the need to use a label and goto, and makes the two
branches mirror each other more closely.

Signed-off-by: default avatarBen Hutchings <bhutchings@solarflare.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 3139e628
Loading
Loading
Loading
Loading
+14 −12
Original line number Diff line number Diff line
@@ -449,15 +449,19 @@ static void efx_rx_packet_lro(struct efx_channel *channel,

	/* Pass the skb/page into the LRO engine */
	if (rx_buf->page) {
		struct sk_buff *skb = napi_get_frags(napi);
		struct page *page = rx_buf->page;
		struct sk_buff *skb;

		EFX_BUG_ON_PARANOID(rx_buf->skb);
		rx_buf->page = NULL;

		skb = napi_get_frags(napi);
		if (!skb) {
			put_page(rx_buf->page);
			gro_result = GRO_DROP;
			goto out;
			put_page(page);
			return;
		}

		skb_shinfo(skb)->frags[0].page = rx_buf->page;
		skb_shinfo(skb)->frags[0].page = page;
		skb_shinfo(skb)->frags[0].page_offset =
			efx_rx_buf_offset(rx_buf);
		skb_shinfo(skb)->frags[0].size = rx_buf->len;
@@ -470,16 +474,14 @@ static void efx_rx_packet_lro(struct efx_channel *channel,
			checksummed ? CHECKSUM_UNNECESSARY : CHECKSUM_NONE;

		gro_result = napi_gro_frags(napi);

out:
		EFX_BUG_ON_PARANOID(rx_buf->skb);
		rx_buf->page = NULL;
	} else {
		EFX_BUG_ON_PARANOID(!rx_buf->skb);
		EFX_BUG_ON_PARANOID(!checksummed);
		struct sk_buff *skb = rx_buf->skb;

		gro_result = napi_gro_receive(napi, rx_buf->skb);
		EFX_BUG_ON_PARANOID(!skb);
		EFX_BUG_ON_PARANOID(!checksummed);
		rx_buf->skb = NULL;

		gro_result = napi_gro_receive(napi, skb);
	}

	if (gro_result == GRO_NORMAL) {