net: ena: Update XDP verdict upon failure
authorShay Agroskin <shayagr@amazon.com>
Fri, 5 Feb 2021 19:51:14 +0000 (21:51 +0200)
committerJakub Kicinski <kuba@kernel.org>
Sat, 6 Feb 2021 23:07:29 +0000 (15:07 -0800)
The verdict returned from ena_xdp_execute() is used to determine the
fate of the RX buffer's page. In case of XDP Redirect/TX error the
verdict should be set to XDP_ABORTED, otherwise the page won't be freed.

Fixes: a318c70ad152 ("net: ena: introduce XDP redirect implementation")
Signed-off-by: Shay Agroskin <shayagr@amazon.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/amazon/ena/ena_netdev.c

index 06596fa1f9fea3dc6c6ff4e3820f5a7d88c24259..a0596c073dddc10d03f0625b58c24f2edbd91b50 100644 (file)
@@ -404,6 +404,7 @@ static int ena_xdp_execute(struct ena_ring *rx_ring, struct xdp_buff *xdp)
                if (unlikely(!xdpf)) {
                        trace_xdp_exception(rx_ring->netdev, xdp_prog, verdict);
                        xdp_stat = &rx_ring->rx_stats.xdp_aborted;
+                       verdict = XDP_ABORTED;
                        break;
                }
 
@@ -424,7 +425,10 @@ static int ena_xdp_execute(struct ena_ring *rx_ring, struct xdp_buff *xdp)
                        xdp_stat = &rx_ring->rx_stats.xdp_redirect;
                        break;
                }
-               fallthrough;
+               trace_xdp_exception(rx_ring->netdev, xdp_prog, verdict);
+               xdp_stat = &rx_ring->rx_stats.xdp_aborted;
+               verdict = XDP_ABORTED;
+               break;
        case XDP_ABORTED:
                trace_xdp_exception(rx_ring->netdev, xdp_prog, verdict);
                xdp_stat = &rx_ring->rx_stats.xdp_aborted;