skb_checksum_help() can fail. Pass its return value back to the caller.

Commonize this software path in goto.

Instead of just returning error try calculating software checksum first.
There is a check for TSO in checksum_sw_fb.

Reviewed-by: Aleksandr Loktionov <[email protected]>
Signed-off-by: Michal Swiatkowski <[email protected]>
---
 drivers/net/ethernet/intel/ice/ice_txrx.c | 20 +++++++++-----------
 1 file changed, 9 insertions(+), 11 deletions(-)

diff --git a/drivers/net/ethernet/intel/ice/ice_txrx.c 
b/drivers/net/ethernet/intel/ice/ice_txrx.c
index 94129a7a9e12..f52a4af36eb0 100644
--- a/drivers/net/ethernet/intel/ice/ice_txrx.c
+++ b/drivers/net/ethernet/intel/ice/ice_txrx.c
@@ -1673,7 +1673,7 @@ int ice_tx_csum(struct ice_tx_buf *first, struct 
ice_tx_offload_params *off)
                        ret = ipv6_skip_exthdr(skb, exthdr - skb->data,
                                               &l4_proto, &frag_off);
                        if (ret < 0)
-                               return -1;
+                               goto checksum_sw_fb;
                }
 
                /* define outer transport */
@@ -1692,11 +1692,7 @@ int ice_tx_csum(struct ice_tx_buf *first, struct 
ice_tx_offload_params *off)
                        l4.hdr = skb_inner_network_header(skb);
                        break;
                default:
-                       if (first->tx_flags & ICE_TX_FLAGS_TSO)
-                               return -1;
-
-                       skb_checksum_help(skb);
-                       return 0;
+                       goto checksum_sw_fb;
                }
 
                /* compute outer L3 header size */
@@ -1755,7 +1751,7 @@ int ice_tx_csum(struct ice_tx_buf *first, struct 
ice_tx_offload_params *off)
                        ipv6_skip_exthdr(skb, exthdr - skb->data, &l4_proto,
                                         &frag_off);
        } else {
-               return -1;
+               goto checksum_sw_fb;
        }
 
        /* compute inner L3 header size */
@@ -1808,15 +1804,17 @@ int ice_tx_csum(struct ice_tx_buf *first, struct 
ice_tx_offload_params *off)
                break;
 
        default:
-               if (first->tx_flags & ICE_TX_FLAGS_TSO)
-                       return -1;
-               skb_checksum_help(skb);
-               return 0;
+               goto checksum_sw_fb;
        }
 
        off->td_cmd |= cmd;
        off->td_offset |= offset;
        return 1;
+
+checksum_sw_fb:
+       if (first->tx_flags & ICE_TX_FLAGS_TSO)
+               return -1;
+       return skb_checksum_help(skb);
 }
 
 /**
-- 
2.49.0

Reply via email to