@@ -2205,7 +2205,7 @@ static int mptcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
22052205 cmsg_flags = MPTCP_CMSG_INQ ;
22062206
22072207 while (copied < len ) {
2208- int bytes_read ;
2208+ int err , bytes_read ;
22092209
22102210 bytes_read = __mptcp_recvmsg_mskq (msk , msg , len - copied , flags , & tss , & cmsg_flags );
22112211 if (unlikely (bytes_read < 0 )) {
@@ -2267,9 +2267,16 @@ static int mptcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
22672267 }
22682268
22692269 pr_debug ("block timeout %ld\n" , timeo );
2270- sk_wait_data (sk , & timeo , NULL );
2270+ mptcp_rcv_space_adjust (msk , copied );
2271+ err = sk_wait_data (sk , & timeo , NULL );
2272+ if (err < 0 ) {
2273+ err = copied ? : err ;
2274+ goto out_err ;
2275+ }
22712276 }
22722277
2278+ mptcp_rcv_space_adjust (msk , copied );
2279+
22732280out_err :
22742281 if (cmsg_flags && copied >= 0 ) {
22752282 if (cmsg_flags & MPTCP_CMSG_TS )
@@ -2285,8 +2292,6 @@ static int mptcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
22852292 pr_debug ("msk=%p rx queue empty=%d:%d copied=%d\n" ,
22862293 msk , skb_queue_empty_lockless (& sk -> sk_receive_queue ),
22872294 skb_queue_empty (& msk -> receive_queue ), copied );
2288- if (!(flags & MSG_PEEK ))
2289- mptcp_rcv_space_adjust (msk , copied );
22902295
22912296 release_sock (sk );
22922297 return copied ;
0 commit comments