The commit is pushed to "branch-rh8-4.18.0-240.1.1.vz8.5.x-ovz" and will appear 
at https://src.openvz.org/scm/ovz/vzkernel.git
after rh8-4.18.0-240.1.1.vz8.5.45
------>
commit 3c5d79c5979c0728f7d11f0392c220c6b8a2637a
Author: Jan Dakinevich <jan.dakinev...@virtuozzo.com>
Date:   Fri Jun 18 20:31:56 2021 +0300

    net/drivers/i40e: suppress warning on skb linearization
    
    Preallocate required memory with reasoned flags and skip memory
    allocation step made by __pskb_pull_tail.
    
    https://pmc.acronis.com/browse/VSTOR-22811
    Signed-off-by: Jan Dakinevich <jan.dakinev...@virtuozzo.com>
    
    Acked-by: Konstantin Khorenko <khore...@virtuozzo.com>
    
    khorenko@:
    * skb buffer is provided to DMA zone, so allocation cannot be switched to
      kvmalloc(), so we just supress the warning here.
    
    * i40e_skb_linearize() code is taken from __pskb_pull_tail(),
      except for the size: we omit "+128" preallocation here
      because no future expansions are expected in this case.
    
    * there is another similar place: i40e_xmit_frame_ring() in 
i40evf/i40e_txrx.c,
      but as we did not trigger the warning there and as we just shut up the 
warning,
      we don't touch the second place in advance.
    
    https://jira.sw.ru/browse/PSBM-127846
    (cherry-picked from vz7 commit 9b2d96420858 ("net/drivers/i40e: suppress
    warning on skb linearization"))
    Signed-off-by: Pavel Tikhomirov <ptikhomi...@virtuozzo.com>
---
 drivers/net/ethernet/intel/i40e/i40e_txrx.c | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/intel/i40e/i40e_txrx.c 
b/drivers/net/ethernet/intel/i40e/i40e_txrx.c
index 1c56ec2421d4..edc094db762e 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_txrx.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_txrx.c
@@ -3554,6 +3554,23 @@ static int i40e_xmit_xdp_ring(struct xdp_frame *xdpf,
        return I40E_XDP_TX;
 }
 
+
+static int i40e_skb_linearize(struct sk_buff *skb)
+{
+       int eat = (skb->tail + skb->data_len) - skb->end;
+
+       /* workaround to avoid allocation without __GFP_ORDER_NOWARN inside
+        * __pskb_pull_tail()
+        */
+       if (eat > 0 || skb_cloned(skb)) {
+               if (pskb_expand_head(skb, 0, eat > 0 ? eat : 0,
+                                    GFP_ATOMIC | __GFP_ORDER_NOWARN))
+                       return -ENOMEM;
+       }
+
+       return __skb_linearize(skb);
+}
+
 /**
  * i40e_xmit_frame_ring - Sends buffer on Tx ring
  * @skb:     send buffer
@@ -3582,7 +3599,7 @@ static netdev_tx_t i40e_xmit_frame_ring(struct sk_buff 
*skb,
 
        count = i40e_xmit_descriptor_count(skb);
        if (i40e_chk_linearize(skb, count)) {
-               if (__skb_linearize(skb)) {
+               if (i40e_skb_linearize(skb)) {
                        dev_kfree_skb_any(skb);
                        return NETDEV_TX_OK;
                }
_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to