Lines Matching refs:sk

25 static bool vsock_has_data(struct sock *sk, struct sk_psock *psock)  in vsock_has_data()  argument
27 struct vsock_sock *vsk = vsock_sk(sk); in vsock_has_data()
34 return vsock_sk_has_data(sk, psock); in vsock_has_data()
37 static bool vsock_msg_wait_data(struct sock *sk, struct sk_psock *psock, long timeo) in vsock_msg_wait_data() argument
43 if (sk->sk_shutdown & RCV_SHUTDOWN) in vsock_msg_wait_data()
49 add_wait_queue(sk_sleep(sk), &wait); in vsock_msg_wait_data()
50 sk_set_bit(SOCKWQ_ASYNC_WAITDATA, sk); in vsock_msg_wait_data()
51 ret = vsock_has_data(sk, psock); in vsock_msg_wait_data()
54 ret = vsock_has_data(sk, psock); in vsock_msg_wait_data()
56 sk_clear_bit(SOCKWQ_ASYNC_WAITDATA, sk); in vsock_msg_wait_data()
57 remove_wait_queue(sk_sleep(sk), &wait); in vsock_msg_wait_data()
61 static int __vsock_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int flags) in __vsock_recvmsg() argument
63 struct socket *sock = sk->sk_socket; in __vsock_recvmsg()
66 if (sk->sk_type == SOCK_STREAM || sk->sk_type == SOCK_SEQPACKET) in __vsock_recvmsg()
68 else if (sk->sk_type == SOCK_DGRAM) in __vsock_recvmsg()
76 static int vsock_bpf_recvmsg(struct sock *sk, struct msghdr *msg, in vsock_bpf_recvmsg() argument
82 psock = sk_psock_get(sk); in vsock_bpf_recvmsg()
84 return __vsock_recvmsg(sk, msg, len, flags); in vsock_bpf_recvmsg()
86 lock_sock(sk); in vsock_bpf_recvmsg()
87 if (vsock_has_data(sk, psock) && sk_psock_queue_empty(psock)) { in vsock_bpf_recvmsg()
88 release_sock(sk); in vsock_bpf_recvmsg()
89 sk_psock_put(sk, psock); in vsock_bpf_recvmsg()
90 return __vsock_recvmsg(sk, msg, len, flags); in vsock_bpf_recvmsg()
93 copied = sk_msg_recvmsg(sk, psock, msg, len, flags); in vsock_bpf_recvmsg()
95 long timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT); in vsock_bpf_recvmsg()
97 if (!vsock_msg_wait_data(sk, psock, timeo)) { in vsock_bpf_recvmsg()
103 release_sock(sk); in vsock_bpf_recvmsg()
104 sk_psock_put(sk, psock); in vsock_bpf_recvmsg()
105 return __vsock_recvmsg(sk, msg, len, flags); in vsock_bpf_recvmsg()
108 copied = sk_msg_recvmsg(sk, psock, msg, len, flags); in vsock_bpf_recvmsg()
111 release_sock(sk); in vsock_bpf_recvmsg()
112 sk_psock_put(sk, psock); in vsock_bpf_recvmsg()
149 int vsock_bpf_update_proto(struct sock *sk, struct sk_psock *psock, bool restore) in vsock_bpf_update_proto() argument
154 sk->sk_write_space = psock->saved_write_space; in vsock_bpf_update_proto()
155 sock_replace_proto(sk, psock->sk_proto); in vsock_bpf_update_proto()
159 vsk = vsock_sk(sk); in vsock_bpf_update_proto()
167 sock_replace_proto(sk, &vsock_bpf_prot); in vsock_bpf_update_proto()