Lines Matching refs:sk
28 static int sock_wait_state(struct sock *sk, int state, unsigned long timeo) in sock_wait_state() argument
33 pr_debug("sk %p", sk); in sock_wait_state()
35 add_wait_queue(sk_sleep(sk), &wait); in sock_wait_state()
38 while (sk->sk_state != state) { in sock_wait_state()
49 release_sock(sk); in sock_wait_state()
51 lock_sock(sk); in sock_wait_state()
54 err = sock_error(sk); in sock_wait_state()
60 remove_wait_queue(sk_sleep(sk), &wait); in sock_wait_state()
72 struct sock *sk = sock->sk; in llcp_sock_bind() local
73 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in llcp_sock_bind()
82 pr_debug("sk %p addr %p family %d\n", sk, addr, addr->sa_family); in llcp_sock_bind()
92 lock_sock(sk); in llcp_sock_bind()
94 if (sk->sk_state != LLCP_CLOSED) { in llcp_sock_bind()
129 nfc_llcp_sock_link(&local->sockets, sk); in llcp_sock_bind()
133 sk->sk_state = LLCP_BOUND; in llcp_sock_bind()
139 release_sock(sk); in llcp_sock_bind()
146 struct sock *sk = sock->sk; in llcp_raw_sock_bind() local
147 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in llcp_raw_sock_bind()
156 pr_debug("sk %p addr %p family %d\n", sk, addr, addr->sa_family); in llcp_raw_sock_bind()
162 lock_sock(sk); in llcp_raw_sock_bind()
164 if (sk->sk_state != LLCP_CLOSED) { in llcp_raw_sock_bind()
185 nfc_llcp_sock_link(&local->raw_sockets, sk); in llcp_raw_sock_bind()
187 sk->sk_state = LLCP_BOUND; in llcp_raw_sock_bind()
193 release_sock(sk); in llcp_raw_sock_bind()
199 struct sock *sk = sock->sk; in llcp_sock_listen() local
202 pr_debug("sk %p backlog %d\n", sk, backlog); in llcp_sock_listen()
204 lock_sock(sk); in llcp_sock_listen()
207 sk->sk_state != LLCP_BOUND) { in llcp_sock_listen()
212 sk->sk_max_ack_backlog = backlog; in llcp_sock_listen()
213 sk->sk_ack_backlog = 0; in llcp_sock_listen()
216 sk->sk_state = LLCP_LISTEN; in llcp_sock_listen()
219 release_sock(sk); in llcp_sock_listen()
227 struct sock *sk = sock->sk; in nfc_llcp_setsockopt() local
228 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in nfc_llcp_setsockopt()
232 pr_debug("%p optname %d\n", sk, optname); in nfc_llcp_setsockopt()
237 lock_sock(sk); in nfc_llcp_setsockopt()
241 if (sk->sk_state == LLCP_CONNECTED || in nfc_llcp_setsockopt()
242 sk->sk_state == LLCP_BOUND || in nfc_llcp_setsockopt()
243 sk->sk_state == LLCP_LISTEN) { in nfc_llcp_setsockopt()
263 if (sk->sk_state == LLCP_CONNECTED || in nfc_llcp_setsockopt()
264 sk->sk_state == LLCP_BOUND || in nfc_llcp_setsockopt()
265 sk->sk_state == LLCP_LISTEN) { in nfc_llcp_setsockopt()
289 release_sock(sk); in nfc_llcp_setsockopt()
301 struct sock *sk = sock->sk; in nfc_llcp_getsockopt() local
302 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in nfc_llcp_getsockopt()
307 pr_debug("%p optname %d\n", sk, optname); in nfc_llcp_getsockopt()
321 lock_sock(sk); in nfc_llcp_getsockopt()
366 release_sock(sk); in nfc_llcp_getsockopt()
374 void nfc_llcp_accept_unlink(struct sock *sk) in nfc_llcp_accept_unlink() argument
376 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in nfc_llcp_accept_unlink()
378 pr_debug("state %d\n", sk->sk_state); in nfc_llcp_accept_unlink()
384 sock_put(sk); in nfc_llcp_accept_unlink()
387 void nfc_llcp_accept_enqueue(struct sock *parent, struct sock *sk) in nfc_llcp_accept_enqueue() argument
389 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in nfc_llcp_accept_enqueue()
393 sock_hold(sk); in nfc_llcp_accept_enqueue()
405 struct sock *sk; in nfc_llcp_accept_dequeue() local
411 sk = &lsk->sk; in nfc_llcp_accept_dequeue()
412 lock_sock(sk); in nfc_llcp_accept_dequeue()
414 if (sk->sk_state == LLCP_CLOSED) { in nfc_llcp_accept_dequeue()
415 release_sock(sk); in nfc_llcp_accept_dequeue()
416 nfc_llcp_accept_unlink(sk); in nfc_llcp_accept_dequeue()
420 if (sk->sk_state == LLCP_CONNECTED || !newsock) { in nfc_llcp_accept_dequeue()
422 sock_put(sk); in nfc_llcp_accept_dequeue()
425 sock_graft(sk, newsock); in nfc_llcp_accept_dequeue()
427 release_sock(sk); in nfc_llcp_accept_dequeue()
429 pr_debug("Returning sk state %d\n", sk->sk_state); in nfc_llcp_accept_dequeue()
433 return sk; in nfc_llcp_accept_dequeue()
436 release_sock(sk); in nfc_llcp_accept_dequeue()
446 struct sock *sk = sock->sk, *new_sk; in llcp_sock_accept() local
450 pr_debug("parent %p\n", sk); in llcp_sock_accept()
452 lock_sock_nested(sk, SINGLE_DEPTH_NESTING); in llcp_sock_accept()
454 if (sk->sk_state != LLCP_LISTEN) { in llcp_sock_accept()
459 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK); in llcp_sock_accept()
462 add_wait_queue_exclusive(sk_sleep(sk), &wait); in llcp_sock_accept()
463 while (!(new_sk = nfc_llcp_accept_dequeue(sk, newsock))) { in llcp_sock_accept()
476 release_sock(sk); in llcp_sock_accept()
478 lock_sock_nested(sk, SINGLE_DEPTH_NESTING); in llcp_sock_accept()
481 remove_wait_queue(sk_sleep(sk), &wait); in llcp_sock_accept()
491 release_sock(sk); in llcp_sock_accept()
499 struct sock *sk = sock->sk; in llcp_sock_getname() local
500 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in llcp_sock_getname()
506 pr_debug("%p %d %d %d\n", sk, llcp_sock->target_idx, in llcp_sock_getname()
528 struct sock *sk; in llcp_accept_poll() local
534 sk = &llcp_sock->sk; in llcp_accept_poll()
536 if (sk->sk_state == LLCP_CONNECTED) in llcp_accept_poll()
546 struct sock *sk = sock->sk; in llcp_sock_poll() local
549 pr_debug("%p\n", sk); in llcp_sock_poll()
551 sock_poll_wait(file, sk_sleep(sk), wait); in llcp_sock_poll()
553 if (sk->sk_state == LLCP_LISTEN) in llcp_sock_poll()
554 return llcp_accept_poll(sk); in llcp_sock_poll()
556 if (sk->sk_err || !skb_queue_empty(&sk->sk_error_queue)) in llcp_sock_poll()
558 (sock_flag(sk, SOCK_SELECT_ERR_QUEUE) ? POLLPRI : 0); in llcp_sock_poll()
560 if (!skb_queue_empty(&sk->sk_receive_queue)) in llcp_sock_poll()
563 if (sk->sk_state == LLCP_CLOSED) in llcp_sock_poll()
566 if (sk->sk_shutdown & RCV_SHUTDOWN) in llcp_sock_poll()
569 if (sk->sk_shutdown == SHUTDOWN_MASK) in llcp_sock_poll()
572 if (sock_writeable(sk) && sk->sk_state == LLCP_CONNECTED) in llcp_sock_poll()
575 sk_set_bit(SOCKWQ_ASYNC_NOSPACE, sk); in llcp_sock_poll()
584 struct sock *sk = sock->sk; in llcp_sock_release() local
586 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in llcp_sock_release()
589 if (!sk) in llcp_sock_release()
592 pr_debug("%p\n", sk); in llcp_sock_release()
600 lock_sock(sk); in llcp_sock_release()
603 if (sk->sk_state == LLCP_CONNECTED) in llcp_sock_release()
606 if (sk->sk_state == LLCP_LISTEN) { in llcp_sock_release()
612 accept_sk = &lsk->sk; in llcp_sock_release()
625 release_sock(sk); in llcp_sock_release()
631 if (sk->sk_state == LLCP_DISCONNECTING) in llcp_sock_release()
635 nfc_llcp_sock_unlink(&local->raw_sockets, sk); in llcp_sock_release()
637 nfc_llcp_sock_unlink(&local->sockets, sk); in llcp_sock_release()
640 sock_orphan(sk); in llcp_sock_release()
641 sock_put(sk); in llcp_sock_release()
649 struct sock *sk = sock->sk; in llcp_sock_connect() local
650 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in llcp_sock_connect()
656 pr_debug("sock %p sk %p flags 0x%x\n", sock, sk, flags); in llcp_sock_connect()
668 lock_sock(sk); in llcp_sock_connect()
670 if (sk->sk_state == LLCP_CONNECTED) { in llcp_sock_connect()
723 nfc_llcp_sock_link(&local->connecting_sockets, sk); in llcp_sock_connect()
729 sk->sk_state = LLCP_CONNECTING; in llcp_sock_connect()
731 ret = sock_wait_state(sk, LLCP_CONNECTED, in llcp_sock_connect()
732 sock_sndtimeo(sk, flags & O_NONBLOCK)); in llcp_sock_connect()
736 release_sock(sk); in llcp_sock_connect()
743 nfc_llcp_sock_unlink(&local->connecting_sockets, sk); in llcp_sock_connect()
749 release_sock(sk); in llcp_sock_connect()
756 struct sock *sk = sock->sk; in llcp_sock_sendmsg() local
757 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in llcp_sock_sendmsg()
760 pr_debug("sock %p sk %p", sock, sk); in llcp_sock_sendmsg()
762 ret = sock_error(sk); in llcp_sock_sendmsg()
769 lock_sock(sk); in llcp_sock_sendmsg()
771 if (sk->sk_type == SOCK_DGRAM) { in llcp_sock_sendmsg()
776 release_sock(sk); in llcp_sock_sendmsg()
780 release_sock(sk); in llcp_sock_sendmsg()
786 if (sk->sk_state != LLCP_CONNECTED) { in llcp_sock_sendmsg()
787 release_sock(sk); in llcp_sock_sendmsg()
791 release_sock(sk); in llcp_sock_sendmsg()
800 struct sock *sk = sock->sk; in llcp_sock_recvmsg() local
805 pr_debug("%p %zu\n", sk, len); in llcp_sock_recvmsg()
807 lock_sock(sk); in llcp_sock_recvmsg()
809 if (sk->sk_state == LLCP_CLOSED && in llcp_sock_recvmsg()
810 skb_queue_empty(&sk->sk_receive_queue)) { in llcp_sock_recvmsg()
811 release_sock(sk); in llcp_sock_recvmsg()
815 release_sock(sk); in llcp_sock_recvmsg()
820 skb = skb_recv_datagram(sk, flags, noblock, &err); in llcp_sock_recvmsg()
823 sk->sk_state, err, sock_error(sk)); in llcp_sock_recvmsg()
825 if (sk->sk_shutdown & RCV_SHUTDOWN) in llcp_sock_recvmsg()
837 skb_queue_head(&sk->sk_receive_queue, skb); in llcp_sock_recvmsg()
841 sock_recv_timestamp(msg, sk, skb); in llcp_sock_recvmsg()
843 if (sk->sk_type == SOCK_DGRAM && msg->msg_name) { in llcp_sock_recvmsg()
863 if (sk->sk_type == SOCK_STREAM || in llcp_sock_recvmsg()
864 sk->sk_type == SOCK_DGRAM || in llcp_sock_recvmsg()
865 sk->sk_type == SOCK_RAW) { in llcp_sock_recvmsg()
868 skb_queue_head(&sk->sk_receive_queue, skb); in llcp_sock_recvmsg()
880 if (sk->sk_type == SOCK_SEQPACKET && (flags & MSG_TRUNC)) in llcp_sock_recvmsg()
926 static void llcp_sock_destruct(struct sock *sk) in llcp_sock_destruct() argument
928 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in llcp_sock_destruct()
930 pr_debug("%p\n", sk); in llcp_sock_destruct()
932 if (sk->sk_state == LLCP_CONNECTED) in llcp_sock_destruct()
935 skb_queue_purge(&sk->sk_receive_queue); in llcp_sock_destruct()
939 if (!sock_flag(sk, SOCK_DEAD)) { in llcp_sock_destruct()
940 pr_err("Freeing alive NFC LLCP socket %p\n", sk); in llcp_sock_destruct()
947 struct sock *sk; in nfc_llcp_sock_alloc() local
950 sk = sk_alloc(&init_net, PF_NFC, gfp, &llcp_sock_proto, kern); in nfc_llcp_sock_alloc()
951 if (!sk) in nfc_llcp_sock_alloc()
954 llcp_sock = nfc_llcp_sock(sk); in nfc_llcp_sock_alloc()
956 sock_init_data(sock, sk); in nfc_llcp_sock_alloc()
957 sk->sk_state = LLCP_CLOSED; in nfc_llcp_sock_alloc()
958 sk->sk_protocol = NFC_SOCKPROTO_LLCP; in nfc_llcp_sock_alloc()
959 sk->sk_type = type; in nfc_llcp_sock_alloc()
960 sk->sk_destruct = llcp_sock_destruct; in nfc_llcp_sock_alloc()
978 return sk; in nfc_llcp_sock_alloc()
998 struct sock *sk; in llcp_sock_create() local
1012 sk = nfc_llcp_sock_alloc(sock, sock->type, GFP_ATOMIC, kern); in llcp_sock_create()
1013 if (sk == NULL) in llcp_sock_create()