return ret;
 }
 
-int mptcp_read_actor(read_descriptor_t *desc, struct sk_buff *skb,
-                    unsigned int offset, size_t len)
-{
-       struct mptcp_read_arg *arg = desc->arg.data;
-       size_t copy_len;
-
-       copy_len = min(desc->count, len);
-
-       if (likely(arg->msg)) {
-               int err;
-
-               err = skb_copy_datagram_msg(skb, offset, arg->msg, copy_len);
-               if (err) {
-                       pr_debug("error path");
-                       desc->error = err;
-                       return err;
-               }
-       } else {
-               pr_debug("Flushing skb payload");
-       }
-
-       desc->count -= copy_len;
-
-       pr_debug("consumed %zu bytes, %zu left", copy_len, desc->count);
-       return copy_len;
-}
-
 static void mptcp_wait_data(struct sock *sk, long *timeo)
 {
        DEFINE_WAIT_FUNC(wait, woken_wake_function);
 
 int mptcp_proto_v6_init(void);
 #endif
 
-struct mptcp_read_arg {
-       struct msghdr *msg;
-};
-
-int mptcp_read_actor(read_descriptor_t *desc, struct sk_buff *skb,
-                    unsigned int offset, size_t len);
-
 void mptcp_get_options(const struct sk_buff *skb,
                       struct tcp_options_received *opt_rx);
 
 
        return MAPPING_OK;
 }
 
+static int subflow_read_actor(read_descriptor_t *desc,
+                             struct sk_buff *skb,
+                             unsigned int offset, size_t len)
+{
+       size_t copy_len = min(desc->count, len);
+
+       desc->count -= copy_len;
+
+       pr_debug("flushed %zu bytes, %zu left", copy_len, desc->count);
+       return copy_len;
+}
+
 static bool subflow_check_data_avail(struct sock *ssk)
 {
        struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
                pr_debug("discarding %zu bytes, current map len=%d", delta,
                         map_remaining);
                if (delta) {
-                       struct mptcp_read_arg arg = {
-                               .msg = NULL,
-                       };
                        read_descriptor_t desc = {
                                .count = delta,
-                               .arg.data = &arg,
                        };
                        int ret;
 
-                       ret = tcp_read_sock(ssk, &desc, mptcp_read_actor);
+                       ret = tcp_read_sock(ssk, &desc, subflow_read_actor);
                        if (ret < 0) {
                                ssk->sk_err = -ret;
                                goto fatal;