Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ddb61a57 authored by Jens Axboe's avatar Jens Axboe Committed by David S. Miller
Browse files

[TCP] tcp_read_sock: Allow recv_actor() return return negative error value.



tcp_read_sock() currently assumes that the recv_actor() only returns
number of bytes copied. For network splice receive, we may have to
return an error in some cases. So allow the actor to return a negative
error value.

Signed-off-by: default avatarJens Axboe <jens.axboe@oracle.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 4b2a8fb3
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -1064,7 +1064,11 @@ int tcp_read_sock(struct sock *sk, read_descriptor_t *desc,
					break;
			}
			used = recv_actor(desc, skb, offset, len);
			if (used <= len) {
			if (used < 0) {
				if (!copied)
					copied = used;
				break;
			} else if (used <= len) {
				seq += used;
				copied += used;
				offset += used;
@@ -1086,7 +1090,7 @@ int tcp_read_sock(struct sock *sk, read_descriptor_t *desc,
	tcp_rcv_space_adjust(sk);

	/* Clean up data we have read: This will do ACK frames. */
	if (copied)
	if (copied > 0)
		tcp_cleanup_rbuf(sk, copied);
	return copied;
}