Commit bfae9dae authored by Florian Westphal's avatar Florian Westphal Committed by David S. Miller
Browse files

mptcp: remove mptcp_read_actor



Only used to discard stale data from the subflow, so move
it where needed.

Signed-off-by: default avatarFlorian Westphal <fw@strlen.de>
Reviewed-by: default avatarMat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 600911ff
Loading
Loading
Loading
Loading
+0 −27
Original line number Diff line number Diff line
@@ -430,33 +430,6 @@ fallback:
	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);
+0 −7
Original line number Diff line number Diff line
@@ -191,13 +191,6 @@ void mptcp_proto_init(void);
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);

+13 −5
Original line number Diff line number Diff line
@@ -408,6 +408,18 @@ validate_seq:
	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);
@@ -482,16 +494,12 @@ static bool subflow_check_data_avail(struct sock *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;