return -EIO;
 }
 
-static bool rtl_skb_pad(struct sk_buff *skb)
-{
-       if (skb_padto(skb, ETH_ZLEN))
-               return false;
-       skb_put(skb, ETH_ZLEN - skb->len);
-       return true;
-}
-
 static bool rtl_test_hw_pad_bug(struct rtl8169_private *tp, struct sk_buff *skb)
 {
        return skb->len < ETH_ZLEN && tp->mac_version == RTL_GIGA_MAC_VER_34;
                u8 ip_protocol;
 
                if (unlikely(rtl_test_hw_pad_bug(tp, skb)))
-                       return skb_checksum_help(skb) == 0 && rtl_skb_pad(skb);
+                       return !(skb_checksum_help(skb) || eth_skb_pad(skb));
 
                if (transport_offset > TCPHO_MAX) {
                        netif_warn(tp, tx_err, tp->dev,
                opts[1] |= transport_offset << TCPHO_SHIFT;
        } else {
                if (unlikely(rtl_test_hw_pad_bug(tp, skb)))
-                       return rtl_skb_pad(skb);
+                       return !eth_skb_pad(skb);
        }
 
        return true;