bool csum_reqd)
 {
        struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
-       struct csum_pseudo_header header;
        u32 offset, seq, delta;
-       __wsum csum;
+       u16 csum;
        int len;
 
        if (!csum_reqd)
         * while the pseudo header requires the original DSS data len,
         * including that
         */
-       header.data_seq = cpu_to_be64(subflow->map_seq);
-       header.subflow_seq = htonl(subflow->map_subflow_seq);
-       header.data_len = htons(subflow->map_data_len + subflow->map_data_fin);
-       header.csum = 0;
-
-       csum = csum_partial(&header, sizeof(header), subflow->map_data_csum);
-       if (unlikely(csum_fold(csum))) {
+       csum = __mptcp_make_csum(subflow->map_seq,
+                                subflow->map_subflow_seq,
+                                subflow->map_data_len + subflow->map_data_fin,
+                                subflow->map_data_csum);
+       if (unlikely(csum)) {
                MPTCP_INC_STATS(sock_net(ssk), MPTCP_MIB_DATACSUMERR);
                subflow->send_mp_fail = 1;
                MPTCP_INC_STATS(sock_net(ssk), MPTCP_MIB_MPFAILTX);