if (dccp_parse_options(sk, NULL, skb))
                        return 1;
 
-               /* Obtain usec RTT sample from SYN exchange (used by CCID 3) */
+               /* Obtain usec RTT sample from SYN exchange (used by TFRC). */
                if (likely(dp->dccps_options_received.dccpor_timestamp_echo))
                        dp->dccps_syn_rtt = dccp_sample_rtt(sk, 10 * (tstamp -
                            dp->dccps_options_received.dccpor_timestamp_echo));
                                                   const struct dccp_hdr *dh,
                                                   const unsigned len)
 {
+       struct dccp_sock *dp = dccp_sk(sk);
+       u32 sample = dp->dccps_options_received.dccpor_timestamp_echo;
        int queued = 0;
 
        switch (dh->dccph_type) {
                if (sk->sk_state == DCCP_PARTOPEN)
                        inet_csk_clear_xmit_timer(sk, ICSK_TIME_DACK);
 
-               dccp_sk(sk)->dccps_osr = DCCP_SKB_CB(skb)->dccpd_seq;
+               /* Obtain usec RTT sample from SYN exchange (used by TFRC). */
+               if (likely(sample)) {
+                       long delta = dccp_timestamp() - sample;
+
+                       dp->dccps_syn_rtt = dccp_sample_rtt(sk, 10 * delta);
+               }
+
+               dp->dccps_osr = DCCP_SKB_CB(skb)->dccpd_seq;
                dccp_set_state(sk, DCCP_OPEN);
 
                if (dh->dccph_type == DCCP_PKT_DATAACK ||
 
                if (DCCP_SKB_CB(skb)->dccpd_type == DCCP_PKT_REQUEST) {
                        /*
                         * Obtain RTT sample from Request/Response exchange.
-                        * This is currently used in CCID 3 initialisation.
+                        * This is currently used for TFRC initialisation.
                         */
                        if (dccp_insert_option_timestamp(skb))
                                return -1;
        if (dccp_feat_insert_opts(NULL, dreq, skb))
                return -1;
 
+       /* Obtain RTT sample from Response/Ack exchange (used by TFRC). */
+       if (dccp_insert_option_timestamp(skb))
+               return -1;
+
        if (dreq->dreq_timestamp_echo != 0 &&
            dccp_insert_option_timestamp_echo(NULL, dreq, skb))
                return -1;