This callback controls setting of POLLIN, POLLRDNORM output bits of poll()
syscall, but in some cases, it is incorrectly to set it, when socket has
at least 1 bytes of available data. Use 'target' which is already exists.
Signed-off-by: Arseniy Krasnov <AVKrasnov@sberdevices.ru>
Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
Reviewed-by: Vishnu Dasa <vdasa@vmware.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
 {
        struct vsock_sock *vsk = vsock_sk(sk);
 
-       if (vsock_stream_has_data(vsk)) {
+       if (vsock_stream_has_data(vsk) >= target) {
                *data_ready_now = true;
        } else {
-               /* We can't read right now because there is nothing in the
-                * queue. Ask for notifications when there is something to
-                * read.
+               /* We can't read right now because there is not enough data
+                * in the queue. Ask for notifications when there is something
+                * to read.
                 */
                if (sk->sk_state == TCP_ESTABLISHED) {
                        if (!send_waiting_read(sk, 1))
 
 {
        struct vsock_sock *vsk = vsock_sk(sk);
 
-       if (vsock_stream_has_data(vsk)) {
+       if (vsock_stream_has_data(vsk) >= target) {
                *data_ready_now = true;
        } else {
-               /* We can't read right now because there is nothing in the
-                * queue. Ask for notifications when there is something to
-                * read.
+               /* We can't read right now because there is not enough data
+                * in the queue. Ask for notifications when there is something
+                * to read.
                 */
                if (sk->sk_state == TCP_ESTABLISHED)
                        vsock_block_update_write_window(sk);