Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

vmci/vsock: check SO_RCVLOWAT before wake up reader

This adds extra condition to wake up data reader: do it only when number
of readable bytes >= SO_RCVLOWAT. Otherwise, there is no sense to kick
user, because it will wait until SO_RCVLOWAT bytes will be dequeued. This
check is performed in vsock_data_ready().

Signed-off-by: Arseniy Krasnov <AVKrasnov@sberdevices.ru>
Reviewed-by: Vishnu Dasa <vdasa@vmware.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>

authored by

Arseniy Krasnov and committed by
Paolo Abeni
e061aed9 39f1ed33

+3 -3
+1 -1
net/vmw_vsock/vmci_transport_notify.c
··· 307 307 struct vsock_sock *vsk = vsock_sk(sk); 308 308 PKT_FIELD(vsk, sent_waiting_read) = false; 309 309 #endif 310 - sk->sk_data_ready(sk); 310 + vsock_data_ready(sk); 311 311 } 312 312 313 313 static void vmci_transport_notify_pkt_socket_init(struct sock *sk)
+2 -2
net/vmw_vsock/vmci_transport_notify_qstate.c
··· 84 84 bool bottom_half, 85 85 struct sockaddr_vm *dst, struct sockaddr_vm *src) 86 86 { 87 - sk->sk_data_ready(sk); 87 + vsock_data_ready(sk); 88 88 } 89 89 90 90 static void vsock_block_update_write_window(struct sock *sk) ··· 282 282 /* See the comment in 283 283 * vmci_transport_notify_pkt_send_post_enqueue(). 284 284 */ 285 - sk->sk_data_ready(sk); 285 + vsock_data_ready(sk); 286 286 } 287 287 288 288 return err;