Commit b79470b6 authored by Stefano Stabellini's avatar Stefano Stabellini Committed by Boris Ostrovsky
Browse files

pvcalls-front: read all data before closing the connection



When a connection is closing in_error is set to ENOTCONN. There could
still be outstanding data on the ring left by the backend. Before
closing the connection on the frontend side, drain the ring.

Signed-off-by: default avatarStefano Stabellini <stefanos@xilinx.com>
Reviewed-by: default avatarBoris Ostrovsky <boris.ostrovsky@oracle.com>
Signed-off-by: default avatarBoris Ostrovsky <boris.ostrovsky@oracle.com>
parent 58f9d806
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -560,15 +560,13 @@ static int __read_ring(struct pvcalls_data_intf *intf,
	error = intf->in_error;
	/* get pointers before reading from the ring */
	virt_rmb();
	if (error < 0)
		return error;

	size = pvcalls_queued(prod, cons, array_size);
	masked_prod = pvcalls_mask(prod, array_size);
	masked_cons = pvcalls_mask(cons, array_size);

	if (size == 0)
		return 0;
		return error ?: size;

	if (len > size)
		len = size;