unsigned char len, u16 idx,
                                     unsigned char *value)
 {
-       int rc = 0;
-       const struct dccp_sock *dp = dccp_sk(sk);
        struct ccid3_hc_tx_sock *hc = ccid3_hc_tx_sk(sk);
        struct ccid3_options_received *opt_recv = &hc->tx_options_received;
        __be32 opt_val;
 
-       if (opt_recv->ccid3or_seqno != dp->dccps_gsr) {
-               opt_recv->ccid3or_seqno              = dp->dccps_gsr;
-               opt_recv->ccid3or_loss_event_rate    = ~0;
-               opt_recv->ccid3or_loss_intervals_idx = 0;
-               opt_recv->ccid3or_loss_intervals_len = 0;
-               opt_recv->ccid3or_receive_rate       = 0;
-       }
-
        switch (option) {
+       case TFRC_OPT_RECEIVE_RATE:
        case TFRC_OPT_LOSS_EVENT_RATE:
                if (unlikely(len != 4)) {
-                       DCCP_WARN("%s(%p), invalid len %d "
-                                 "for TFRC_OPT_LOSS_EVENT_RATE\n",
-                                 dccp_role(sk), sk, len);
-                       rc = -EINVAL;
-               } else {
-                       opt_val = get_unaligned((__be32 *)value);
-                       opt_recv->ccid3or_loss_event_rate = ntohl(opt_val);
-                       ccid3_pr_debug("%s(%p), LOSS_EVENT_RATE=%u\n",
-                                      dccp_role(sk), sk,
-                                      opt_recv->ccid3or_loss_event_rate);
+                       DCCP_WARN("%s(%p), invalid len %d for %u\n",
+                                 dccp_role(sk), sk, len, option);
+                       return -EINVAL;
                }
-               break;
-       case TFRC_OPT_LOSS_INTERVALS:
-               opt_recv->ccid3or_loss_intervals_idx = idx;
-               opt_recv->ccid3or_loss_intervals_len = len;
-               ccid3_pr_debug("%s(%p), LOSS_INTERVALS=(%u, %u)\n",
-                              dccp_role(sk), sk,
-                              opt_recv->ccid3or_loss_intervals_idx,
-                              opt_recv->ccid3or_loss_intervals_len);
-               break;
-       case TFRC_OPT_RECEIVE_RATE:
-               if (unlikely(len != 4)) {
-                       DCCP_WARN("%s(%p), invalid len %d "
-                                 "for TFRC_OPT_RECEIVE_RATE\n",
-                                 dccp_role(sk), sk, len);
-                       rc = -EINVAL;
-               } else {
-                       opt_val = get_unaligned((__be32 *)value);
-                       opt_recv->ccid3or_receive_rate = ntohl(opt_val);
+               opt_val = ntohl(get_unaligned((__be32 *)value));
+
+               if (option == TFRC_OPT_RECEIVE_RATE) {
+                       opt_recv->ccid3or_receive_rate = opt_val;
                        ccid3_pr_debug("%s(%p), RECEIVE_RATE=%u\n",
-                                      dccp_role(sk), sk,
-                                      opt_recv->ccid3or_receive_rate);
+                                      dccp_role(sk), sk, opt_val);
+               } else {
+                       opt_recv->ccid3or_loss_event_rate = opt_val;
+                       ccid3_pr_debug("%s(%p), LOSS_EVENT_RATE=%u\n",
+                                      dccp_role(sk), sk, opt_val);
                }
-               break;
        }
-
-       return rc;
+       return 0;
 }
 
 static int ccid3_hc_tx_init(struct ccid *ccid, struct sock *sk)