sfc: Move assertions and buffer cleanup earlier in efx_rx_packet_lro()
authorBen Hutchings <bhutchings@solarflare.com>
Mon, 23 Nov 2009 16:02:25 +0000 (16:02 +0000)
committerDavid S. Miller <davem@davemloft.net>
Tue, 24 Nov 2009 18:58:28 +0000 (10:58 -0800)
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>
drivers/net/sfc/rx.c

index c407352..9e33391 100644 (file)
@@ -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) {