@@ -2205,7 +2205,7 @@ static int mptcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
2205
2205
cmsg_flags = MPTCP_CMSG_INQ ;
2206
2206
2207
2207
while (copied < len ) {
2208
- int bytes_read ;
2208
+ int err , bytes_read ;
2209
2209
2210
2210
bytes_read = __mptcp_recvmsg_mskq (msk , msg , len - copied , flags , & tss , & cmsg_flags );
2211
2211
if (unlikely (bytes_read < 0 )) {
@@ -2267,9 +2267,16 @@ static int mptcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
2267
2267
}
2268
2268
2269
2269
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
+ }
2271
2276
}
2272
2277
2278
+ mptcp_rcv_space_adjust (msk , copied );
2279
+
2273
2280
out_err :
2274
2281
if (cmsg_flags && copied >= 0 ) {
2275
2282
if (cmsg_flags & MPTCP_CMSG_TS )
@@ -2285,8 +2292,6 @@ static int mptcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
2285
2292
pr_debug ("msk=%p rx queue empty=%d:%d copied=%d\n" ,
2286
2293
msk , skb_queue_empty_lockless (& sk -> sk_receive_queue ),
2287
2294
skb_queue_empty (& msk -> receive_queue ), copied );
2288
- if (!(flags & MSG_PEEK ))
2289
- mptcp_rcv_space_adjust (msk , copied );
2290
2295
2291
2296
release_sock (sk );
2292
2297
return copied ;
0 commit comments