cmsg_flags = MPTCP_CMSG_INQ;
 
        while (copied < len) {
-               int bytes_read;
+               int err, bytes_read;
 
                bytes_read = __mptcp_recvmsg_mskq(msk, msg, len - copied, flags, &tss, &cmsg_flags);
                if (unlikely(bytes_read < 0)) {
                }
 
                pr_debug("block timeout %ld\n", timeo);
-               sk_wait_data(sk, &timeo, NULL);
+               mptcp_rcv_space_adjust(msk, copied);
+               err = sk_wait_data(sk, &timeo, NULL);
+               if (err < 0) {
+                       err = copied ? : err;
+                       goto out_err;
+               }
        }
 
+       mptcp_rcv_space_adjust(msk, copied);
+
 out_err:
        if (cmsg_flags && copied >= 0) {
                if (cmsg_flags & MPTCP_CMSG_TS)
        pr_debug("msk=%p rx queue empty=%d:%d copied=%d\n",
                 msk, skb_queue_empty_lockless(&sk->sk_receive_queue),
                 skb_queue_empty(&msk->receive_queue), copied);
-       if (!(flags & MSG_PEEK))
-               mptcp_rcv_space_adjust(msk, copied);
 
        release_sock(sk);
        return copied;