mptcp: schedule work for better snd subflow selection

Otherwise the packet scheduler policy will not be
enforced when pushing pending data at MPTCP-level
ack reception time.

Reviewed-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Paolo Abeni 2021-01-20 15:39:13 +01:00 коммит произвёл Jakub Kicinski
Родитель ec369c3a33
Коммит 40dc9416cc
1 изменённых файлов: 8 добавлений и 3 удалений

Просмотреть файл

@ -2242,6 +2242,7 @@ static void mptcp_worker(struct work_struct *work)
if (unlikely(state == TCP_CLOSE)) if (unlikely(state == TCP_CLOSE))
goto unlock; goto unlock;
mptcp_push_pending(sk, 0);
mptcp_check_data_fin_ack(sk); mptcp_check_data_fin_ack(sk);
__mptcp_flush_join_list(msk); __mptcp_flush_join_list(msk);
@ -2899,10 +2900,14 @@ void __mptcp_check_push(struct sock *sk, struct sock *ssk)
if (!mptcp_send_head(sk)) if (!mptcp_send_head(sk))
return; return;
if (!sock_owned_by_user(sk)) if (!sock_owned_by_user(sk)) {
__mptcp_subflow_push_pending(sk, ssk); if (mptcp_subflow_get_send(mptcp_sk(sk)) == ssk)
else __mptcp_subflow_push_pending(sk, ssk);
else
mptcp_schedule_work(sk);
} else {
set_bit(MPTCP_PUSH_PENDING, &mptcp_sk(sk)->flags); set_bit(MPTCP_PUSH_PENDING, &mptcp_sk(sk)->flags);
}
} }
#define MPTCP_DEFERRED_ALL (TCPF_WRITE_TIMER_DEFERRED) #define MPTCP_DEFERRED_ALL (TCPF_WRITE_TIMER_DEFERRED)