Lines Matching refs:sk
17 static int sock_wait_state(struct sock *sk, int state, unsigned long timeo) in sock_wait_state() argument
22 pr_debug("sk %p", sk); in sock_wait_state()
24 add_wait_queue(sk_sleep(sk), &wait); in sock_wait_state()
27 while (sk->sk_state != state) { in sock_wait_state()
38 release_sock(sk); in sock_wait_state()
40 lock_sock(sk); in sock_wait_state()
43 err = sock_error(sk); in sock_wait_state()
49 remove_wait_queue(sk_sleep(sk), &wait); in sock_wait_state()
61 struct sock *sk = sock->sk; in llcp_sock_bind() local
62 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in llcp_sock_bind()
72 pr_debug("sk %p addr %p family %d\n", sk, addr, addr->sa_family); in llcp_sock_bind()
82 lock_sock(sk); in llcp_sock_bind()
84 if (sk->sk_state != LLCP_CLOSED) { in llcp_sock_bind()
130 nfc_llcp_sock_link(&local->sockets, sk); in llcp_sock_bind()
134 sk->sk_state = LLCP_BOUND; in llcp_sock_bind()
140 release_sock(sk); in llcp_sock_bind()
147 struct sock *sk = sock->sk; in llcp_raw_sock_bind() local
148 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in llcp_raw_sock_bind()
158 pr_debug("sk %p addr %p family %d\n", sk, addr, addr->sa_family); in llcp_raw_sock_bind()
164 lock_sock(sk); in llcp_raw_sock_bind()
166 if (sk->sk_state != LLCP_CLOSED) { in llcp_raw_sock_bind()
187 nfc_llcp_sock_link(&local->raw_sockets, sk); in llcp_raw_sock_bind()
189 sk->sk_state = LLCP_BOUND; in llcp_raw_sock_bind()
195 release_sock(sk); in llcp_raw_sock_bind()
201 struct sock *sk = sock->sk; in llcp_sock_listen() local
204 pr_debug("sk %p backlog %d\n", sk, backlog); in llcp_sock_listen()
206 lock_sock(sk); in llcp_sock_listen()
209 sk->sk_state != LLCP_BOUND) { in llcp_sock_listen()
214 sk->sk_max_ack_backlog = backlog; in llcp_sock_listen()
215 sk->sk_ack_backlog = 0; in llcp_sock_listen()
218 sk->sk_state = LLCP_LISTEN; in llcp_sock_listen()
221 release_sock(sk); in llcp_sock_listen()
229 struct sock *sk = sock->sk; in nfc_llcp_setsockopt() local
230 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in nfc_llcp_setsockopt()
234 pr_debug("%p optname %d\n", sk, optname); in nfc_llcp_setsockopt()
239 lock_sock(sk); in nfc_llcp_setsockopt()
243 if (sk->sk_state == LLCP_CONNECTED || in nfc_llcp_setsockopt()
244 sk->sk_state == LLCP_BOUND || in nfc_llcp_setsockopt()
245 sk->sk_state == LLCP_LISTEN) { in nfc_llcp_setsockopt()
265 if (sk->sk_state == LLCP_CONNECTED || in nfc_llcp_setsockopt()
266 sk->sk_state == LLCP_BOUND || in nfc_llcp_setsockopt()
267 sk->sk_state == LLCP_LISTEN) { in nfc_llcp_setsockopt()
291 release_sock(sk); in nfc_llcp_setsockopt()
303 struct sock *sk = sock->sk; in nfc_llcp_getsockopt() local
304 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in nfc_llcp_getsockopt()
309 pr_debug("%p optname %d\n", sk, optname); in nfc_llcp_getsockopt()
323 lock_sock(sk); in nfc_llcp_getsockopt()
368 release_sock(sk); in nfc_llcp_getsockopt()
376 void nfc_llcp_accept_unlink(struct sock *sk) in nfc_llcp_accept_unlink() argument
378 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in nfc_llcp_accept_unlink()
380 pr_debug("state %d\n", sk->sk_state); in nfc_llcp_accept_unlink()
386 sock_put(sk); in nfc_llcp_accept_unlink()
389 void nfc_llcp_accept_enqueue(struct sock *parent, struct sock *sk) in nfc_llcp_accept_enqueue() argument
391 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in nfc_llcp_accept_enqueue()
395 sock_hold(sk); in nfc_llcp_accept_enqueue()
407 struct sock *sk; in nfc_llcp_accept_dequeue() local
413 sk = &lsk->sk; in nfc_llcp_accept_dequeue()
414 lock_sock(sk); in nfc_llcp_accept_dequeue()
416 if (sk->sk_state == LLCP_CLOSED) { in nfc_llcp_accept_dequeue()
417 release_sock(sk); in nfc_llcp_accept_dequeue()
418 nfc_llcp_accept_unlink(sk); in nfc_llcp_accept_dequeue()
422 if (sk->sk_state == LLCP_CONNECTED || !newsock) { in nfc_llcp_accept_dequeue()
424 sock_put(sk); in nfc_llcp_accept_dequeue()
427 sock_graft(sk, newsock); in nfc_llcp_accept_dequeue()
429 release_sock(sk); in nfc_llcp_accept_dequeue()
431 pr_debug("Returning sk state %d\n", sk->sk_state); in nfc_llcp_accept_dequeue()
435 return sk; in nfc_llcp_accept_dequeue()
438 release_sock(sk); in nfc_llcp_accept_dequeue()
448 struct sock *sk = sock->sk, *new_sk; in llcp_sock_accept() local
452 pr_debug("parent %p\n", sk); in llcp_sock_accept()
454 lock_sock_nested(sk, SINGLE_DEPTH_NESTING); in llcp_sock_accept()
456 if (sk->sk_state != LLCP_LISTEN) { in llcp_sock_accept()
461 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK); in llcp_sock_accept()
464 add_wait_queue_exclusive(sk_sleep(sk), &wait); in llcp_sock_accept()
465 while (!(new_sk = nfc_llcp_accept_dequeue(sk, newsock))) { in llcp_sock_accept()
478 release_sock(sk); in llcp_sock_accept()
480 lock_sock_nested(sk, SINGLE_DEPTH_NESTING); in llcp_sock_accept()
483 remove_wait_queue(sk_sleep(sk), &wait); in llcp_sock_accept()
493 release_sock(sk); in llcp_sock_accept()
501 struct sock *sk = sock->sk; in llcp_sock_getname() local
502 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in llcp_sock_getname()
508 pr_debug("%p %d %d %d\n", sk, llcp_sock->target_idx, in llcp_sock_getname()
513 lock_sock(sk); in llcp_sock_getname()
515 release_sock(sk); in llcp_sock_getname()
527 release_sock(sk); in llcp_sock_getname()
535 struct sock *sk; in llcp_accept_poll() local
541 sk = &llcp_sock->sk; in llcp_accept_poll()
543 if (sk->sk_state == LLCP_CONNECTED) in llcp_accept_poll()
553 struct sock *sk = sock->sk; in llcp_sock_poll() local
556 pr_debug("%p\n", sk); in llcp_sock_poll()
560 if (sk->sk_state == LLCP_LISTEN) in llcp_sock_poll()
561 return llcp_accept_poll(sk); in llcp_sock_poll()
563 if (sk->sk_err || !skb_queue_empty_lockless(&sk->sk_error_queue)) in llcp_sock_poll()
565 (sock_flag(sk, SOCK_SELECT_ERR_QUEUE) ? EPOLLPRI : 0); in llcp_sock_poll()
567 if (!skb_queue_empty_lockless(&sk->sk_receive_queue)) in llcp_sock_poll()
570 if (sk->sk_state == LLCP_CLOSED) in llcp_sock_poll()
573 if (sk->sk_shutdown & RCV_SHUTDOWN) in llcp_sock_poll()
576 if (sk->sk_shutdown == SHUTDOWN_MASK) in llcp_sock_poll()
579 if (sock_writeable(sk) && sk->sk_state == LLCP_CONNECTED) in llcp_sock_poll()
582 sk_set_bit(SOCKWQ_ASYNC_NOSPACE, sk); in llcp_sock_poll()
591 struct sock *sk = sock->sk; in llcp_sock_release() local
593 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in llcp_sock_release()
596 if (!sk) in llcp_sock_release()
599 pr_debug("%p\n", sk); in llcp_sock_release()
607 lock_sock(sk); in llcp_sock_release()
610 if (sk->sk_state == LLCP_CONNECTED) in llcp_sock_release()
613 if (sk->sk_state == LLCP_LISTEN) { in llcp_sock_release()
619 accept_sk = &lsk->sk; in llcp_sock_release()
632 release_sock(sk); in llcp_sock_release()
638 if (sk->sk_state == LLCP_DISCONNECTING) in llcp_sock_release()
642 nfc_llcp_sock_unlink(&local->raw_sockets, sk); in llcp_sock_release()
644 nfc_llcp_sock_unlink(&local->sockets, sk); in llcp_sock_release()
647 sock_orphan(sk); in llcp_sock_release()
648 sock_put(sk); in llcp_sock_release()
656 struct sock *sk = sock->sk; in llcp_sock_connect() local
657 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in llcp_sock_connect()
663 pr_debug("sock %p sk %p flags 0x%x\n", sock, sk, flags); in llcp_sock_connect()
674 lock_sock(sk); in llcp_sock_connect()
676 if (sk->sk_state == LLCP_CONNECTED) { in llcp_sock_connect()
680 if (sk->sk_state == LLCP_CONNECTING) { in llcp_sock_connect()
739 nfc_llcp_sock_link(&local->connecting_sockets, sk); in llcp_sock_connect()
745 sk->sk_state = LLCP_CONNECTING; in llcp_sock_connect()
747 ret = sock_wait_state(sk, LLCP_CONNECTED, in llcp_sock_connect()
748 sock_sndtimeo(sk, flags & O_NONBLOCK)); in llcp_sock_connect()
752 release_sock(sk); in llcp_sock_connect()
757 nfc_llcp_sock_unlink(&local->connecting_sockets, sk); in llcp_sock_connect()
770 release_sock(sk); in llcp_sock_connect()
777 struct sock *sk = sock->sk; in llcp_sock_sendmsg() local
778 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in llcp_sock_sendmsg()
781 pr_debug("sock %p sk %p", sock, sk); in llcp_sock_sendmsg()
783 ret = sock_error(sk); in llcp_sock_sendmsg()
790 lock_sock(sk); in llcp_sock_sendmsg()
792 if (sk->sk_type == SOCK_DGRAM) { in llcp_sock_sendmsg()
797 release_sock(sk); in llcp_sock_sendmsg()
801 release_sock(sk); in llcp_sock_sendmsg()
807 if (sk->sk_state != LLCP_CONNECTED) { in llcp_sock_sendmsg()
808 release_sock(sk); in llcp_sock_sendmsg()
812 release_sock(sk); in llcp_sock_sendmsg()
821 struct sock *sk = sock->sk; in llcp_sock_recvmsg() local
826 pr_debug("%p %zu\n", sk, len); in llcp_sock_recvmsg()
828 lock_sock(sk); in llcp_sock_recvmsg()
830 if (sk->sk_state == LLCP_CLOSED && in llcp_sock_recvmsg()
831 skb_queue_empty(&sk->sk_receive_queue)) { in llcp_sock_recvmsg()
832 release_sock(sk); in llcp_sock_recvmsg()
836 release_sock(sk); in llcp_sock_recvmsg()
841 skb = skb_recv_datagram(sk, flags, noblock, &err); in llcp_sock_recvmsg()
844 sk->sk_state, err, sock_error(sk)); in llcp_sock_recvmsg()
846 if (sk->sk_shutdown & RCV_SHUTDOWN) in llcp_sock_recvmsg()
858 skb_queue_head(&sk->sk_receive_queue, skb); in llcp_sock_recvmsg()
862 sock_recv_timestamp(msg, sk, skb); in llcp_sock_recvmsg()
864 if (sk->sk_type == SOCK_DGRAM && msg->msg_name) { in llcp_sock_recvmsg()
884 if (sk->sk_type == SOCK_STREAM || in llcp_sock_recvmsg()
885 sk->sk_type == SOCK_DGRAM || in llcp_sock_recvmsg()
886 sk->sk_type == SOCK_RAW) { in llcp_sock_recvmsg()
889 skb_queue_head(&sk->sk_receive_queue, skb); in llcp_sock_recvmsg()
901 if (sk->sk_type == SOCK_SEQPACKET && (flags & MSG_TRUNC)) in llcp_sock_recvmsg()
945 static void llcp_sock_destruct(struct sock *sk) in llcp_sock_destruct() argument
947 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in llcp_sock_destruct()
949 pr_debug("%p\n", sk); in llcp_sock_destruct()
951 if (sk->sk_state == LLCP_CONNECTED) in llcp_sock_destruct()
954 skb_queue_purge(&sk->sk_receive_queue); in llcp_sock_destruct()
958 if (!sock_flag(sk, SOCK_DEAD)) { in llcp_sock_destruct()
959 pr_err("Freeing alive NFC LLCP socket %p\n", sk); in llcp_sock_destruct()
966 struct sock *sk; in nfc_llcp_sock_alloc() local
969 sk = sk_alloc(&init_net, PF_NFC, gfp, &llcp_sock_proto, kern); in nfc_llcp_sock_alloc()
970 if (!sk) in nfc_llcp_sock_alloc()
973 llcp_sock = nfc_llcp_sock(sk); in nfc_llcp_sock_alloc()
975 sock_init_data(sock, sk); in nfc_llcp_sock_alloc()
976 sk->sk_state = LLCP_CLOSED; in nfc_llcp_sock_alloc()
977 sk->sk_protocol = NFC_SOCKPROTO_LLCP; in nfc_llcp_sock_alloc()
978 sk->sk_type = type; in nfc_llcp_sock_alloc()
979 sk->sk_destruct = llcp_sock_destruct; in nfc_llcp_sock_alloc()
997 return sk; in nfc_llcp_sock_alloc()
1017 struct sock *sk; in llcp_sock_create() local
1034 sk = nfc_llcp_sock_alloc(sock, sock->type, GFP_ATOMIC, kern); in llcp_sock_create()
1035 if (sk == NULL) in llcp_sock_create()