Generally the check should be very cheap, as the sk_buff_head is in cache.

Signed-off-by: Edward Cree <ec...@solarflare.com>
---
 net/core/dev.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/net/core/dev.c b/net/core/dev.c
index 4c5ebfab9bc8..d6084b0cd9ce 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -4773,7 +4773,8 @@ static void __netif_receive_skb_list(struct list_head 
*head)
 
                        /* Handle the previous sublist */
                        list_cut_before(&sublist, head, &skb->list);
-                       __netif_receive_skb_list_core(&sublist, pfmemalloc);
+                       if (!list_empty(&sublist))
+                               __netif_receive_skb_list_core(&sublist, 
pfmemalloc);
                        pfmemalloc = !pfmemalloc;
                        /* See comments in __netif_receive_skb */
                        if (pfmemalloc)
@@ -4783,7 +4784,8 @@ static void __netif_receive_skb_list(struct list_head 
*head)
                }
        }
        /* Handle the remaining sublist */
-       __netif_receive_skb_list_core(head, pfmemalloc);
+       if (!list_empty(head))
+               __netif_receive_skb_list_core(head, pfmemalloc);
        /* Restore pflags */
        if (pfmemalloc)
                memalloc_noreclaim_restore(noreclaim_flag);
@@ -4944,6 +4946,8 @@ void netif_receive_skb_list(struct list_head *head)
 {
        struct sk_buff *skb;
 
+       if (list_empty(head))
+               return;
        list_for_each_entry(skb, head, list)
                trace_netif_receive_skb_list_entry(skb);
        netif_receive_skb_list_internal(head);

Reply via email to