mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-18 17:54:13 +08:00
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: Ben Hutchings <bhutchings@solarflare.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
3139e62827
commit
1241e951af
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user