vsock: add API call for data ready
This adds 'vsock_data_ready()' which must be called by transport to kick sleeping data readers. It checks for SO_RCVLOWAT value before waking user, thus preventing spurious wake ups. Based on 'tcp_data_ready()' logic. Signed-off-by: Arseniy Krasnov <AVKrasnov@sberdevices.ru> Reviewed-by: Stefano Garzarella <sgarzare@redhat.com> Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
parent
ee0b3843a2
commit
f2fdcf67ac
|
@ -78,6 +78,7 @@ struct vsock_sock {
|
||||||
s64 vsock_stream_has_data(struct vsock_sock *vsk);
|
s64 vsock_stream_has_data(struct vsock_sock *vsk);
|
||||||
s64 vsock_stream_has_space(struct vsock_sock *vsk);
|
s64 vsock_stream_has_space(struct vsock_sock *vsk);
|
||||||
struct sock *vsock_create_connected(struct sock *parent);
|
struct sock *vsock_create_connected(struct sock *parent);
|
||||||
|
void vsock_data_ready(struct sock *sk);
|
||||||
|
|
||||||
/**** TRANSPORT ****/
|
/**** TRANSPORT ****/
|
||||||
|
|
||||||
|
|
|
@ -882,6 +882,16 @@ s64 vsock_stream_has_space(struct vsock_sock *vsk)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(vsock_stream_has_space);
|
EXPORT_SYMBOL_GPL(vsock_stream_has_space);
|
||||||
|
|
||||||
|
void vsock_data_ready(struct sock *sk)
|
||||||
|
{
|
||||||
|
struct vsock_sock *vsk = vsock_sk(sk);
|
||||||
|
|
||||||
|
if (vsock_stream_has_data(vsk) >= sk->sk_rcvlowat ||
|
||||||
|
sock_flag(sk, SOCK_DONE))
|
||||||
|
sk->sk_data_ready(sk);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(vsock_data_ready);
|
||||||
|
|
||||||
static int vsock_release(struct socket *sock)
|
static int vsock_release(struct socket *sock)
|
||||||
{
|
{
|
||||||
__vsock_release(sock->sk, 0);
|
__vsock_release(sock->sk, 0);
|
||||||
|
|
Loading…
Reference in New Issue