skb_set_hash(skb, le32_to_cpu(compl_desc->hash), hash_type);
 }
 
-static void gve_rx_free_skb(struct gve_rx_ring *rx)
+static void gve_rx_free_skb(struct napi_struct *napi, struct gve_rx_ring *rx)
 {
        if (!rx->ctx.skb_head)
                return;
 
+       if (rx->ctx.skb_head == napi->skb)
+               napi->skb = NULL;
        dev_kfree_skb_any(rx->ctx.skb_head);
        rx->ctx.skb_head = NULL;
        rx->ctx.skb_tail = NULL;
 
                err = gve_rx_dqo(napi, rx, compl_desc, complq->head, rx->q_num);
                if (err < 0) {
-                       gve_rx_free_skb(rx);
+                       gve_rx_free_skb(napi, rx);
                        u64_stats_update_begin(&rx->statss);
                        if (err == -ENOMEM)
                                rx->rx_skb_alloc_fail++;
 
                /* gve_rx_complete_skb() will consume skb if successful */
                if (gve_rx_complete_skb(rx, napi, compl_desc, feat) != 0) {
-                       gve_rx_free_skb(rx);
+                       gve_rx_free_skb(napi, rx);
                        u64_stats_update_begin(&rx->statss);
                        rx->rx_desc_err_dropped_pkt++;
                        u64_stats_update_end(&rx->statss);