tree:
https://git.kernel.org/pub/scm/linux/kernel/git/martineau/linux.git
kbuild-force-failure
head: 7b9033fbfc792cc54e9d65b2a2adf6cf86734261
commit: 7b9033fbfc792cc54e9d65b2a2adf6cf86734261 [1/1] Deliberately break the automated
build, making sure defconfig is working as expected.
config: arc-defconfig (attached as .config)
compiler: arc-elf-gcc (GCC) 9.3.0
reproduce:
wget
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O
~/bin/make.cross
chmod +x ~/bin/make.cross
git checkout 7b9033fbfc792cc54e9d65b2a2adf6cf86734261
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day GCC_VERSION=9.3.0 make.cross ARCH=arc
If you fix the issue, kindly add following tag as appropriate
Reported-by: kbuild test robot <lkp(a)intel.com>
All error/warnings (new ones prefixed by >>):
net/mptcp/protocol.c: In function '__mptcp_nmpc_socket':
> net/mptcp/protocol.c:55:13: error: invalid storage class for
function '__mptcp_needs_tcp_fallback'
55 | static bool
__mptcp_needs_tcp_fallback(const struct mptcp_sock *msk)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
> net/mptcp/protocol.c:55:1: warning: ISO C90 forbids mixed
declarations and code [-Wdeclaration-after-statement]
55 | static bool
__mptcp_needs_tcp_fallback(const struct mptcp_sock *msk)
| ^~~~~~
> net/mptcp/protocol.c:60:23: error: invalid storage class for
function 'mptcp_is_tcpsk'
60 | static struct socket
*mptcp_is_tcpsk(struct sock *sk)
| ^~~~~~~~~~~~~~
> net/mptcp/protocol.c:87:23: error: invalid storage class for
function '__mptcp_tcp_fallback'
87 | static struct socket
*__mptcp_tcp_fallback(struct mptcp_sock *msk)
| ^~~~~~~~~~~~~~~~~~~~
> net/mptcp/protocol.c:103:13: error: invalid storage class for
function '__mptcp_can_create_subflow'
103 | static bool
__mptcp_can_create_subflow(const struct mptcp_sock *msk)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
> net/mptcp/protocol.c:108:23: error: invalid storage class for
function '__mptcp_socket_create'
108 | static struct socket
*__mptcp_socket_create(struct mptcp_sock *msk, int state)
| ^~~~~~~~~~~~~~~~~~~~~
> net/mptcp/protocol.c:142:13: error: invalid storage class for
function '__mptcp_move_skb'
142 | static void __mptcp_move_skb(struct
mptcp_sock *msk, struct sock *ssk,
| ^~~~~~~~~~~~~~~~
> net/mptcp/protocol.c:157:13: error: invalid storage class for
function 'mptcp_subflow_dsn_valid'
157 | static bool
mptcp_subflow_dsn_valid(const struct mptcp_sock *msk,
| ^~~~~~~~~~~~~~~~~~~~~~~
> net/mptcp/protocol.c:177:13: error: invalid storage class for
function '__mptcp_move_skbs_from_subflow'
177 | static bool
__mptcp_move_skbs_from_subflow(struct mptcp_sock *msk,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> net/mptcp/protocol.c:257:13: error: invalid storage class for
function 'move_skbs_to_msk'
257 | static bool move_skbs_to_msk(struct
mptcp_sock *msk, struct sock *ssk)
| ^~~~~~~~~~~~~~~~
> net/mptcp/protocol.c:305:13: error: invalid storage class for
function '__mptcp_flush_join_list'
305 | static void
__mptcp_flush_join_list(struct mptcp_sock *msk)
| ^~~~~~~~~~~~~~~~~~~~~~~
> net/mptcp/protocol.c:315:13: error: invalid storage class for
function 'mptcp_set_timeout'
315 | static void mptcp_set_timeout(const
struct sock *sk, const struct sock *ssk)
| ^~~~~~~~~~~~~~~~~
> net/mptcp/protocol.c:325:13: error: invalid storage class for
function 'mptcp_timer_pending'
325 | static bool
mptcp_timer_pending(struct sock *sk)
| ^~~~~~~~~~~~~~~~~~~
> net/mptcp/protocol.c:330:13: error: invalid storage class for
function 'mptcp_reset_timer'
330 | static void mptcp_reset_timer(struct
sock *sk)
| ^~~~~~~~~~~~~~~~~
> net/mptcp/protocol.c:360:13: error: invalid storage class for
function 'mptcp_stop_timer'
360 | static void mptcp_stop_timer(struct
sock *sk)
| ^~~~~~~~~~~~~~~~
> net/mptcp/protocol.c:368:13: error: invalid storage class for
function 'mptcp_ext_cache_refill'
368 | static bool
mptcp_ext_cache_refill(struct mptcp_sock *msk)
| ^~~~~~~~~~~~~~~~~~~~~~
> net/mptcp/protocol.c:376:21: error: invalid storage class for
function 'mptcp_subflow_recv_lookup'
376 | static struct sock
*mptcp_subflow_recv_lookup(const struct mptcp_sock *msk)
| ^~~~~~~~~~~~~~~~~~~~~~~~~
> net/mptcp/protocol.c:391:13: error: invalid storage class for
function 'mptcp_skb_can_collapse_to'
391 | static bool
mptcp_skb_can_collapse_to(u64 write_seq,
| ^~~~~~~~~~~~~~~~~~~~~~~~~
> net/mptcp/protocol.c:402:13: error: invalid storage class for
function 'mptcp_frag_can_collapse_to'
402 | static bool
mptcp_frag_can_collapse_to(const struct mptcp_sock *msk,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
> net/mptcp/protocol.c:410:13: error: invalid storage class for
function 'dfrag_uncharge'
410 | static void dfrag_uncharge(struct sock
*sk, int len)
| ^~~~~~~~~~~~~~
net/mptcp/protocol.c:416:13: error: invalid storage class for function
'dfrag_clear'
416 | static void dfrag_clear(struct sock *sk, struct mptcp_data_frag *dfrag)
| ^~~~~~~~~~~
net/mptcp/protocol.c:425:13: error: invalid storage class for function
'mptcp_clean_una'
425 | static void mptcp_clean_una(struct sock *sk)
| ^~~~~~~~~~~~~~~
net/mptcp/protocol.c:463:13: error: invalid storage class for function
'mptcp_page_frag_refill'
463 | static bool mptcp_page_frag_refill(struct sock *sk, struct page_frag *pfrag)
| ^~~~~~~~~~~~~~~~~~~~~~
net/mptcp/protocol.c:475:1: error: invalid storage class for function
'mptcp_carve_data_frag'
475 | mptcp_carve_data_frag(const struct mptcp_sock *msk, struct page_frag *pfrag,
| ^~~~~~~~~~~~~~~~~~~~~
net/mptcp/protocol.c:491:12: error: invalid storage class for function
'mptcp_sendmsg_frag'
491 | static int mptcp_sendmsg_frag(struct sock *sk, struct sock *ssk,
| ^~~~~~~~~~~~~~~~~~
net/mptcp/protocol.c:656:21: error: invalid storage class for function
'mptcp_subflow_get_send'
656 | static struct sock *mptcp_subflow_get_send(struct mptcp_sock *msk)
| ^~~~~~~~~~~~~~~~~~~~~~
net/mptcp/protocol.c:693:13: error: invalid storage class for function
'ssk_check_wmem'
693 | static void ssk_check_wmem(struct mptcp_sock *msk, struct sock *ssk)
| ^~~~~~~~~~~~~~
net/mptcp/protocol.c:710:12: error: invalid storage class for function
'mptcp_sendmsg'
710 | static int mptcp_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
| ^~~~~~~~~~~~~
net/mptcp/protocol.c:800:13: error: invalid storage class for function
'mptcp_wait_data'
800 | static void mptcp_wait_data(struct sock *sk, long *timeo)
| ^~~~~~~~~~~~~~~
net/mptcp/protocol.c:815:12: error: invalid storage class for function
'__mptcp_recvmsg_mskq'
815 | static int __mptcp_recvmsg_mskq(struct mptcp_sock *msk,
| ^~~~~~~~~~~~~~~~~~~~
net/mptcp/protocol.c:853:13: error: invalid storage class for function
'__mptcp_move_skbs'
853 | static bool __mptcp_move_skbs(struct mptcp_sock *msk)
| ^~~~~~~~~~~~~~~~~
net/mptcp/protocol.c:872:12: error: invalid storage class for function
'mptcp_recvmsg'
872 | static int mptcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
| ^~~~~~~~~~~~~
net/mptcp/protocol.c:979:13: error: invalid storage class for function
'mptcp_retransmit_handler'
979 | static void mptcp_retransmit_handler(struct sock *sk)
| ^~~~~~~~~~~~~~~~~~~~~~~~
net/mptcp/protocol.c:992:13: error: invalid storage class for function
'mptcp_retransmit_timer'
992 | static void mptcp_retransmit_timer(struct timer_list *t)
| ^~~~~~~~~~~~~~~~~~~~~~
net/mptcp/protocol.c:1016:21: error: invalid storage class for function
'mptcp_subflow_get_retrans'
1016 | static struct sock *mptcp_subflow_get_retrans(const struct mptcp_sock *msk)
| ^~~~~~~~~~~~~~~~~~~~~~~~~
net/mptcp/protocol.c:1050:13: error: invalid storage class for function
'__mptcp_close_ssk'
1050 | static void __mptcp_close_ssk(struct sock *sk, struct sock *ssk,
| ^~~~~~~~~~~~~~~~~
net/mptcp/protocol.c:1067:21: error: invalid storage class for function
'mptcp_sync_mss'
1067 | static unsigned int mptcp_sync_mss(struct sock *sk, u32 pmtu)
| ^~~~~~~~~~~~~~
net/mptcp/protocol.c:1072:13: error: invalid storage class for function
'mptcp_check_for_eof'
1072 | static void mptcp_check_for_eof(struct mptcp_sock *msk)
| ^~~~~~~~~~~~~~~~~~~
net/mptcp/protocol.c:1093:13: error: invalid storage class for function
'mptcp_worker'
1093 | static void mptcp_worker(struct work_struct *work)
| ^~~~~~~~~~~~
net/mptcp/protocol.c:1160:12: error: invalid storage class for function
'__mptcp_init_sock'
1160 | static int __mptcp_init_sock(struct sock *sk)
| ^~~~~~~~~~~~~~~~~
net/mptcp/protocol.c:1183:12: error: invalid storage class for function
'mptcp_init_sock'
1183 | static int mptcp_init_sock(struct sock *sk)
| ^~~~~~~~~~~~~~~
net/mptcp/protocol.c:1204:13: error: invalid storage class for function
'__mptcp_clear_xmit'
1204 | static void __mptcp_clear_xmit(struct sock *sk)
| ^~~~~~~~~~~~~~~~~~
net/mptcp/protocol.c:1215:13: error: invalid storage class for function
'mptcp_cancel_work'
1215 | static void mptcp_cancel_work(struct sock *sk)
| ^~~~~~~~~~~~~~~~~
net/mptcp/protocol.c:1223:13: error: invalid storage class for function
'mptcp_subflow_shutdown'
1223 | static void mptcp_subflow_shutdown(struct sock *ssk, int how,
| ^~~~~~~~~~~~~~~~~~~~~~
net/mptcp/protocol.c:1256:13: error: invalid storage class for function
'mptcp_close'
1256 | static void mptcp_close(struct sock *sk, long timeout)
| ^~~~~~~~~~~
net/mptcp/protocol.c:1294:13: error: invalid storage class for function
'mptcp_copy_inaddrs'
1294 | static void mptcp_copy_inaddrs(struct sock *msk, const struct sock *ssk)
| ^~~~~~~~~~~~~~~~~~
net/mptcp/protocol.c:1317:12: error: invalid storage class for function
'mptcp_disconnect'
1317 | static int mptcp_disconnect(struct sock *sk, int flags)
| ^~~~~~~~~~~~~~~~
net/mptcp/protocol.c:1327:27: error: invalid storage class for function
'mptcp_inet6_sk'
1327 | static struct ipv6_pinfo *mptcp_inet6_sk(const struct sock *sk)
| ^~~~~~~~~~~~~~
net/mptcp/protocol.c:1393:21: error: invalid storage class for function
'mptcp_accept'
1393 | static struct sock *mptcp_accept(struct sock *sk, int flags, int *err,
| ^~~~~~~~~~~~
net/mptcp/protocol.c:1454:13: error: invalid storage class for function
'mptcp_destroy'
1454 | static void mptcp_destroy(struct sock *sk)
| ^~~~~~~~~~~~~
net/mptcp/protocol.c:1464:12: error: invalid storage class for function
'mptcp_setsockopt'
1464 | static int mptcp_setsockopt(struct sock *sk, int level, int optname,
| ^~~~~~~~~~~~~~~~
net/mptcp/protocol.c:1488:12: error: invalid storage class for function
'mptcp_getsockopt'
1488 | static int mptcp_getsockopt(struct sock *sk, int level, int optname,
| ^~~~~~~~~~~~~~~~
net/mptcp/protocol.c:1518:13: error: invalid storage class for function
'mptcp_release_cb'
1518 | static void mptcp_release_cb(struct sock *sk)
vim +/__mptcp_needs_tcp_fallback +55 net/mptcp/protocol.c
d027236c41fd02 Paolo Abeni 2020-03-27 42
2303f994b3e187 Peter Krystad 2020-01-21 43 /* If msk has an initial subflow socket,
and the MP_CAPABLE handshake has not
2303f994b3e187 Peter Krystad 2020-01-21 44 * completed yet or has failed, return
the subflow socket.
2303f994b3e187 Peter Krystad 2020-01-21 45 * Otherwise return NULL.
2303f994b3e187 Peter Krystad 2020-01-21 46 */
2303f994b3e187 Peter Krystad 2020-01-21 47 static struct socket
*__mptcp_nmpc_socket(const struct mptcp_sock *msk)
2303f994b3e187 Peter Krystad 2020-01-21 48 {
d22f4988ffecbe Christoph Paasch 2020-01-21 49 if (!msk->subflow ||
READ_ONCE(msk->can_ack))
2303f994b3e187 Peter Krystad 2020-01-21 50 return NULL;
2303f994b3e187 Peter Krystad 2020-01-21 51
2303f994b3e187 Peter Krystad 2020-01-21 52 return msk->subflow;
7b9033fbfc792c Mat Martineau 2020-05-05 53
2303f994b3e187 Peter Krystad 2020-01-21 54
8ab183deb26a3b Paolo Abeni 2020-01-21 @55 static bool
__mptcp_needs_tcp_fallback(const struct mptcp_sock *msk)
8ab183deb26a3b Paolo Abeni 2020-01-21 56 {
8ab183deb26a3b Paolo Abeni 2020-01-21 57 return msk->first &&
!sk_is_mptcp(msk->first);
8ab183deb26a3b Paolo Abeni 2020-01-21 58 }
8ab183deb26a3b Paolo Abeni 2020-01-21 59
0b4f33def7bbde Florian Westphal 2020-04-02 @60 static struct socket
*mptcp_is_tcpsk(struct sock *sk)
0b4f33def7bbde Florian Westphal 2020-04-02 61 {
0b4f33def7bbde Florian Westphal 2020-04-02 62 struct socket *sock = sk->sk_socket;
0b4f33def7bbde Florian Westphal 2020-04-02 63
0b4f33def7bbde Florian Westphal 2020-04-02 64 if (sock->sk != sk)
0b4f33def7bbde Florian Westphal 2020-04-02 65 return NULL;
0b4f33def7bbde Florian Westphal 2020-04-02 66
0b4f33def7bbde Florian Westphal 2020-04-02 67 if (unlikely(sk->sk_prot ==
&tcp_prot)) {
0b4f33def7bbde Florian Westphal 2020-04-02 68 /* we are being invoked after
mptcp_accept() has
0b4f33def7bbde Florian Westphal 2020-04-02 69 * accepted a non-mp-capable flow: sk
is a tcp_sk,
0b4f33def7bbde Florian Westphal 2020-04-02 70 * not an mptcp one.
0b4f33def7bbde Florian Westphal 2020-04-02 71 *
0b4f33def7bbde Florian Westphal 2020-04-02 72 * Hand the socket over to tcp so all
further socket ops
0b4f33def7bbde Florian Westphal 2020-04-02 73 * bypass mptcp.
0b4f33def7bbde Florian Westphal 2020-04-02 74 */
0b4f33def7bbde Florian Westphal 2020-04-02 75 sock->ops = &inet_stream_ops;
0b4f33def7bbde Florian Westphal 2020-04-02 76 return sock;
0b4f33def7bbde Florian Westphal 2020-04-02 77 #if IS_ENABLED(CONFIG_MPTCP_IPV6)
0b4f33def7bbde Florian Westphal 2020-04-02 78 } else if (unlikely(sk->sk_prot ==
&tcpv6_prot)) {
0b4f33def7bbde Florian Westphal 2020-04-02 79 sock->ops = &inet6_stream_ops;
0b4f33def7bbde Florian Westphal 2020-04-02 80 return sock;
0b4f33def7bbde Florian Westphal 2020-04-02 81 #endif
0b4f33def7bbde Florian Westphal 2020-04-02 82 }
0b4f33def7bbde Florian Westphal 2020-04-02 83
0b4f33def7bbde Florian Westphal 2020-04-02 84 return NULL;
0b4f33def7bbde Florian Westphal 2020-04-02 85 }
0b4f33def7bbde Florian Westphal 2020-04-02 86
8ab183deb26a3b Paolo Abeni 2020-01-21 @87 static struct socket
*__mptcp_tcp_fallback(struct mptcp_sock *msk)
cec37a6e41aae7 Peter Krystad 2020-01-21 88 {
0b4f33def7bbde Florian Westphal 2020-04-02 89 struct socket *sock;
0b4f33def7bbde Florian Westphal 2020-04-02 90
cec37a6e41aae7 Peter Krystad 2020-01-21 91 sock_owned_by_me((const struct sock
*)msk);
cec37a6e41aae7 Peter Krystad 2020-01-21 92
0b4f33def7bbde Florian Westphal 2020-04-02 93 sock = mptcp_is_tcpsk((struct sock
*)msk);
0b4f33def7bbde Florian Westphal 2020-04-02 94 if (unlikely(sock))
0b4f33def7bbde Florian Westphal 2020-04-02 95 return sock;
0b4f33def7bbde Florian Westphal 2020-04-02 96
8ab183deb26a3b Paolo Abeni 2020-01-21 97 if
(likely(!__mptcp_needs_tcp_fallback(msk)))
cec37a6e41aae7 Peter Krystad 2020-01-21 98 return NULL;
cec37a6e41aae7 Peter Krystad 2020-01-21 99
2c22c06ce426a0 Florian Westphal 2020-02-04 100 return msk->subflow;
8ab183deb26a3b Paolo Abeni 2020-01-21 101 }
8ab183deb26a3b Paolo Abeni 2020-01-21 102
2303f994b3e187 Peter Krystad 2020-01-21 @103 static bool
__mptcp_can_create_subflow(const struct mptcp_sock *msk)
2303f994b3e187 Peter Krystad 2020-01-21 104 {
8ab183deb26a3b Paolo Abeni 2020-01-21 105 return !msk->first;
2303f994b3e187 Peter Krystad 2020-01-21 106 }
2303f994b3e187 Peter Krystad 2020-01-21 107
2303f994b3e187 Peter Krystad 2020-01-21 @108 static struct socket
*__mptcp_socket_create(struct mptcp_sock *msk, int state)
2303f994b3e187 Peter Krystad 2020-01-21 109 {
2303f994b3e187 Peter Krystad 2020-01-21 110 struct mptcp_subflow_context *subflow;
2303f994b3e187 Peter Krystad 2020-01-21 111 struct sock *sk = (struct sock *)msk;
2303f994b3e187 Peter Krystad 2020-01-21 112 struct socket *ssock;
2303f994b3e187 Peter Krystad 2020-01-21 113 int err;
2303f994b3e187 Peter Krystad 2020-01-21 114
0b4f33def7bbde Florian Westphal 2020-04-02 115 ssock = __mptcp_tcp_fallback(msk);
0b4f33def7bbde Florian Westphal 2020-04-02 116 if (unlikely(ssock))
0b4f33def7bbde Florian Westphal 2020-04-02 117 return ssock;
0b4f33def7bbde Florian Westphal 2020-04-02 118
2303f994b3e187 Peter Krystad 2020-01-21 119 ssock = __mptcp_nmpc_socket(msk);
2303f994b3e187 Peter Krystad 2020-01-21 120 if (ssock)
2303f994b3e187 Peter Krystad 2020-01-21 121 goto set_state;
2303f994b3e187 Peter Krystad 2020-01-21 122
2303f994b3e187 Peter Krystad 2020-01-21 123 if (!__mptcp_can_create_subflow(msk))
2303f994b3e187 Peter Krystad 2020-01-21 124 return ERR_PTR(-EINVAL);
2303f994b3e187 Peter Krystad 2020-01-21 125
2303f994b3e187 Peter Krystad 2020-01-21 126 err = mptcp_subflow_create_socket(sk,
&ssock);
2303f994b3e187 Peter Krystad 2020-01-21 127 if (err)
2303f994b3e187 Peter Krystad 2020-01-21 128 return ERR_PTR(err);
2303f994b3e187 Peter Krystad 2020-01-21 129
8ab183deb26a3b Paolo Abeni 2020-01-21 130 msk->first = ssock->sk;
2303f994b3e187 Peter Krystad 2020-01-21 131 msk->subflow = ssock;
2303f994b3e187 Peter Krystad 2020-01-21 132 subflow =
mptcp_subflow_ctx(ssock->sk);
cec37a6e41aae7 Peter Krystad 2020-01-21 133 list_add(&subflow->node,
&msk->conn_list);
2303f994b3e187 Peter Krystad 2020-01-21 134 subflow->request_mptcp = 1;
2303f994b3e187 Peter Krystad 2020-01-21 135
2303f994b3e187 Peter Krystad 2020-01-21 136 set_state:
2303f994b3e187 Peter Krystad 2020-01-21 137 if (state != MPTCP_SAME_STATE)
2303f994b3e187 Peter Krystad 2020-01-21 138 inet_sk_state_store(sk, state);
2303f994b3e187 Peter Krystad 2020-01-21 139 return ssock;
2303f994b3e187 Peter Krystad 2020-01-21 140 }
2303f994b3e187 Peter Krystad 2020-01-21 141
6771bfd9ee2460 Florian Westphal 2020-02-26 @142 static void __mptcp_move_skb(struct
mptcp_sock *msk, struct sock *ssk,
6771bfd9ee2460 Florian Westphal 2020-02-26 143 struct sk_buff *skb,
6771bfd9ee2460 Florian Westphal 2020-02-26 144 unsigned int offset, size_t
copy_len)
6771bfd9ee2460 Florian Westphal 2020-02-26 145 {
6771bfd9ee2460 Florian Westphal 2020-02-26 146 struct sock *sk = (struct sock *)msk;
6771bfd9ee2460 Florian Westphal 2020-02-26 147
6771bfd9ee2460 Florian Westphal 2020-02-26 148 __skb_unlink(skb,
&ssk->sk_receive_queue);
600911ff5f72ba Florian Westphal 2020-02-26 149 skb_set_owner_r(skb, sk);
6771bfd9ee2460 Florian Westphal 2020-02-26 150
__skb_queue_tail(&sk->sk_receive_queue, skb);
6771bfd9ee2460 Florian Westphal 2020-02-26 151
6771bfd9ee2460 Florian Westphal 2020-02-26 152 msk->ack_seq += copy_len;
6771bfd9ee2460 Florian Westphal 2020-02-26 153 MPTCP_SKB_CB(skb)->offset = offset;
6771bfd9ee2460 Florian Westphal 2020-02-26 154 }
6771bfd9ee2460 Florian Westphal 2020-02-26 155
de06f57392b60e Florian Westphal 2020-04-02 156 /* both sockets must be locked */
de06f57392b60e Florian Westphal 2020-04-02 @157 static bool mptcp_subflow_dsn_valid(const
struct mptcp_sock *msk,
de06f57392b60e Florian Westphal 2020-04-02 158 struct sock *ssk)
de06f57392b60e Florian Westphal 2020-04-02 159 {
de06f57392b60e Florian Westphal 2020-04-02 160 struct mptcp_subflow_context *subflow =
mptcp_subflow_ctx(ssk);
de06f57392b60e Florian Westphal 2020-04-02 161 u64 dsn =
mptcp_subflow_get_mapped_dsn(subflow);
de06f57392b60e Florian Westphal 2020-04-02 162
de06f57392b60e Florian Westphal 2020-04-02 163 /* revalidate data sequence number.
de06f57392b60e Florian Westphal 2020-04-02 164 *
de06f57392b60e Florian Westphal 2020-04-02 165 * mptcp_subflow_data_available() is
usually called
de06f57392b60e Florian Westphal 2020-04-02 166 * without msk lock. Its unlikely (but
possible)
de06f57392b60e Florian Westphal 2020-04-02 167 * that msk->ack_seq has been
advanced since the last
de06f57392b60e Florian Westphal 2020-04-02 168 * call found in-sequence data.
de06f57392b60e Florian Westphal 2020-04-02 169 */
de06f57392b60e Florian Westphal 2020-04-02 170 if (likely(dsn == msk->ack_seq))
de06f57392b60e Florian Westphal 2020-04-02 171 return true;
de06f57392b60e Florian Westphal 2020-04-02 172
de06f57392b60e Florian Westphal 2020-04-02 173 subflow->data_avail = 0;
de06f57392b60e Florian Westphal 2020-04-02 174 return
mptcp_subflow_data_available(ssk);
de06f57392b60e Florian Westphal 2020-04-02 175 }
de06f57392b60e Florian Westphal 2020-04-02 176
6771bfd9ee2460 Florian Westphal 2020-02-26 @177 static bool
__mptcp_move_skbs_from_subflow(struct mptcp_sock *msk,
6771bfd9ee2460 Florian Westphal 2020-02-26 178 struct sock *ssk,
6771bfd9ee2460 Florian Westphal 2020-02-26 179 unsigned int *bytes)
6771bfd9ee2460 Florian Westphal 2020-02-26 180 {
6771bfd9ee2460 Florian Westphal 2020-02-26 181 struct mptcp_subflow_context *subflow =
mptcp_subflow_ctx(ssk);
600911ff5f72ba Florian Westphal 2020-02-26 182 struct sock *sk = (struct sock *)msk;
6771bfd9ee2460 Florian Westphal 2020-02-26 183 unsigned int moved = 0;
6771bfd9ee2460 Florian Westphal 2020-02-26 184 bool more_data_avail;
6771bfd9ee2460 Florian Westphal 2020-02-26 185 struct tcp_sock *tp;
6771bfd9ee2460 Florian Westphal 2020-02-26 186 bool done = false;
600911ff5f72ba Florian Westphal 2020-02-26 187
de06f57392b60e Florian Westphal 2020-04-02 188 if (!mptcp_subflow_dsn_valid(msk, ssk))
{
de06f57392b60e Florian Westphal 2020-04-02 189 *bytes = 0;
de06f57392b60e Florian Westphal 2020-04-02 190 return false;
de06f57392b60e Florian Westphal 2020-04-02 191 }
de06f57392b60e Florian Westphal 2020-04-02 192
ec33916d47cbac Florian Westphal 2020-03-06 193 if (!(sk->sk_userlocks &
SOCK_RCVBUF_LOCK)) {
ec33916d47cbac Florian Westphal 2020-03-06 194 int rcvbuf = max(ssk->sk_rcvbuf,
sk->sk_rcvbuf);
ec33916d47cbac Florian Westphal 2020-03-06 195
600911ff5f72ba Florian Westphal 2020-02-26 196 if (rcvbuf > sk->sk_rcvbuf)
600911ff5f72ba Florian Westphal 2020-02-26 197 sk->sk_rcvbuf = rcvbuf;
ec33916d47cbac Florian Westphal 2020-03-06 198 }
6771bfd9ee2460 Florian Westphal 2020-02-26 199
6771bfd9ee2460 Florian Westphal 2020-02-26 200 tp = tcp_sk(ssk);
6771bfd9ee2460 Florian Westphal 2020-02-26 201 do {
6771bfd9ee2460 Florian Westphal 2020-02-26 202 u32 map_remaining, offset;
6771bfd9ee2460 Florian Westphal 2020-02-26 203 u32 seq = tp->copied_seq;
6771bfd9ee2460 Florian Westphal 2020-02-26 204 struct sk_buff *skb;
6771bfd9ee2460 Florian Westphal 2020-02-26 205 bool fin;
6771bfd9ee2460 Florian Westphal 2020-02-26 206
6771bfd9ee2460 Florian Westphal 2020-02-26 207 /* try to move as much data as
available */
6771bfd9ee2460 Florian Westphal 2020-02-26 208 map_remaining =
subflow->map_data_len -
6771bfd9ee2460 Florian Westphal 2020-02-26 209
mptcp_subflow_get_map_offset(subflow);
6771bfd9ee2460 Florian Westphal 2020-02-26 210
6771bfd9ee2460 Florian Westphal 2020-02-26 211 skb =
skb_peek(&ssk->sk_receive_queue);
6771bfd9ee2460 Florian Westphal 2020-02-26 212 if (!skb)
6771bfd9ee2460 Florian Westphal 2020-02-26 213 break;
6771bfd9ee2460 Florian Westphal 2020-02-26 214
6771bfd9ee2460 Florian Westphal 2020-02-26 215 offset = seq -
TCP_SKB_CB(skb)->seq;
6771bfd9ee2460 Florian Westphal 2020-02-26 216 fin = TCP_SKB_CB(skb)->tcp_flags
& TCPHDR_FIN;
6771bfd9ee2460 Florian Westphal 2020-02-26 217 if (fin) {
6771bfd9ee2460 Florian Westphal 2020-02-26 218 done = true;
6771bfd9ee2460 Florian Westphal 2020-02-26 219 seq++;
6771bfd9ee2460 Florian Westphal 2020-02-26 220 }
6771bfd9ee2460 Florian Westphal 2020-02-26 221
6771bfd9ee2460 Florian Westphal 2020-02-26 222 if (offset < skb->len) {
6771bfd9ee2460 Florian Westphal 2020-02-26 223 size_t len = skb->len - offset;
6771bfd9ee2460 Florian Westphal 2020-02-26 224
6771bfd9ee2460 Florian Westphal 2020-02-26 225 if (tp->urg_data)
6771bfd9ee2460 Florian Westphal 2020-02-26 226 done = true;
6771bfd9ee2460 Florian Westphal 2020-02-26 227
6771bfd9ee2460 Florian Westphal 2020-02-26 228 __mptcp_move_skb(msk, ssk, skb,
offset, len);
6771bfd9ee2460 Florian Westphal 2020-02-26 229 seq += len;
6771bfd9ee2460 Florian Westphal 2020-02-26 230 moved += len;
6771bfd9ee2460 Florian Westphal 2020-02-26 231
6771bfd9ee2460 Florian Westphal 2020-02-26 232 if (WARN_ON_ONCE(map_remaining <
len))
6771bfd9ee2460 Florian Westphal 2020-02-26 233 break;
6771bfd9ee2460 Florian Westphal 2020-02-26 234 } else {
6771bfd9ee2460 Florian Westphal 2020-02-26 235 WARN_ON_ONCE(!fin);
6771bfd9ee2460 Florian Westphal 2020-02-26 236 sk_eat_skb(ssk, skb);
6771bfd9ee2460 Florian Westphal 2020-02-26 237 done = true;
6771bfd9ee2460 Florian Westphal 2020-02-26 238 }
6771bfd9ee2460 Florian Westphal 2020-02-26 239
6771bfd9ee2460 Florian Westphal 2020-02-26 240 WRITE_ONCE(tp->copied_seq, seq);
6771bfd9ee2460 Florian Westphal 2020-02-26 241 more_data_avail =
mptcp_subflow_data_available(ssk);
600911ff5f72ba Florian Westphal 2020-02-26 242
600911ff5f72ba Florian Westphal 2020-02-26 243 if
(atomic_read(&sk->sk_rmem_alloc) > READ_ONCE(sk->sk_rcvbuf)) {
600911ff5f72ba Florian Westphal 2020-02-26 244 done = true;
600911ff5f72ba Florian Westphal 2020-02-26 245 break;
600911ff5f72ba Florian Westphal 2020-02-26 246 }
6771bfd9ee2460 Florian Westphal 2020-02-26 247 } while (more_data_avail);
6771bfd9ee2460 Florian Westphal 2020-02-26 248
6771bfd9ee2460 Florian Westphal 2020-02-26 249 *bytes = moved;
6771bfd9ee2460 Florian Westphal 2020-02-26 250
6771bfd9ee2460 Florian Westphal 2020-02-26 251 return done;
6771bfd9ee2460 Florian Westphal 2020-02-26 252 }
6771bfd9ee2460 Florian Westphal 2020-02-26 253
:::::: The code at line 55 was first introduced by commit
:::::: 8ab183deb26a3b79f8021afa9e83cc1bbd812031 mptcp: cope with later TCP fallback
:::::: TO: Paolo Abeni <pabeni(a)redhat.com>
:::::: CC: David S. Miller <davem(a)davemloft.net>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org