}
        } else if (skb->csum_bad) {
                /* ip_summed == CHECKSUM_NONE in this case */
-               return 1;
+               return (__force __sum16)1;
        }
 
        skb->csum = psum;
 static inline __sum16 gso_make_checksum(struct sk_buff *skb, __wsum res)
 {
        int plen = SKB_GSO_CB(skb)->csum_start - skb_headroom(skb) -
-           skb_transport_offset(skb);
-       __u16 csum;
+                  skb_transport_offset(skb);
+       __wsum partial;
 
-       csum = csum_fold(csum_partial(skb_transport_header(skb),
-                                     plen, skb->csum));
+       partial = csum_partial(skb_transport_header(skb), plen, skb->csum);
        skb->csum = res;
        SKB_GSO_CB(skb)->csum_start -= plen;
 
-       return csum;
+       return csum_fold(partial);
 }
 
 static inline bool skb_is_gso(const struct sk_buff *skb)