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()
124 nfc_llcp_sock_link(&local->sockets, sk); in llcp_sock_bind()
128 sk->sk_state = LLCP_BOUND; in llcp_sock_bind()
134 release_sock(sk); in llcp_sock_bind()
141 struct sock *sk = sock->sk; in llcp_raw_sock_bind() local
142 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in llcp_raw_sock_bind()
152 pr_debug("sk %p addr %p family %d\n", sk, addr, addr->sa_family); in llcp_raw_sock_bind()
158 lock_sock(sk); in llcp_raw_sock_bind()
160 if (sk->sk_state != LLCP_CLOSED) { in llcp_raw_sock_bind()
181 nfc_llcp_sock_link(&local->raw_sockets, sk); in llcp_raw_sock_bind()
183 sk->sk_state = LLCP_BOUND; in llcp_raw_sock_bind()
189 release_sock(sk); in llcp_raw_sock_bind()
195 struct sock *sk = sock->sk; in llcp_sock_listen() local
198 pr_debug("sk %p backlog %d\n", sk, backlog); in llcp_sock_listen()
200 lock_sock(sk); in llcp_sock_listen()
203 sk->sk_state != LLCP_BOUND) { in llcp_sock_listen()
208 sk->sk_max_ack_backlog = backlog; in llcp_sock_listen()
209 sk->sk_ack_backlog = 0; in llcp_sock_listen()
212 sk->sk_state = LLCP_LISTEN; in llcp_sock_listen()
215 release_sock(sk); in llcp_sock_listen()
223 struct sock *sk = sock->sk; in nfc_llcp_setsockopt() local
224 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in nfc_llcp_setsockopt()
228 pr_debug("%p optname %d\n", sk, optname); in nfc_llcp_setsockopt()
233 lock_sock(sk); in nfc_llcp_setsockopt()
237 if (sk->sk_state == LLCP_CONNECTED || in nfc_llcp_setsockopt()
238 sk->sk_state == LLCP_BOUND || in nfc_llcp_setsockopt()
239 sk->sk_state == LLCP_LISTEN) { in nfc_llcp_setsockopt()
259 if (sk->sk_state == LLCP_CONNECTED || in nfc_llcp_setsockopt()
260 sk->sk_state == LLCP_BOUND || in nfc_llcp_setsockopt()
261 sk->sk_state == LLCP_LISTEN) { in nfc_llcp_setsockopt()
285 release_sock(sk); in nfc_llcp_setsockopt()
297 struct sock *sk = sock->sk; in nfc_llcp_getsockopt() local
298 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in nfc_llcp_getsockopt()
303 pr_debug("%p optname %d\n", sk, optname); in nfc_llcp_getsockopt()
317 lock_sock(sk); in nfc_llcp_getsockopt()
362 release_sock(sk); in nfc_llcp_getsockopt()
370 void nfc_llcp_accept_unlink(struct sock *sk) in nfc_llcp_accept_unlink() argument
372 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in nfc_llcp_accept_unlink()
374 pr_debug("state %d\n", sk->sk_state); in nfc_llcp_accept_unlink()
380 sock_put(sk); in nfc_llcp_accept_unlink()
383 void nfc_llcp_accept_enqueue(struct sock *parent, struct sock *sk) in nfc_llcp_accept_enqueue() argument
385 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in nfc_llcp_accept_enqueue()
389 sock_hold(sk); in nfc_llcp_accept_enqueue()
401 struct sock *sk; in nfc_llcp_accept_dequeue() local
407 sk = &lsk->sk; in nfc_llcp_accept_dequeue()
408 lock_sock(sk); in nfc_llcp_accept_dequeue()
410 if (sk->sk_state == LLCP_CLOSED) { in nfc_llcp_accept_dequeue()
411 release_sock(sk); in nfc_llcp_accept_dequeue()
412 nfc_llcp_accept_unlink(sk); in nfc_llcp_accept_dequeue()
416 if (sk->sk_state == LLCP_CONNECTED || !newsock) { in nfc_llcp_accept_dequeue()
418 sock_put(sk); in nfc_llcp_accept_dequeue()
421 sock_graft(sk, newsock); in nfc_llcp_accept_dequeue()
423 release_sock(sk); in nfc_llcp_accept_dequeue()
425 pr_debug("Returning sk state %d\n", sk->sk_state); in nfc_llcp_accept_dequeue()
429 return sk; in nfc_llcp_accept_dequeue()
432 release_sock(sk); in nfc_llcp_accept_dequeue()
442 struct sock *sk = sock->sk, *new_sk; in llcp_sock_accept() local
446 pr_debug("parent %p\n", sk); in llcp_sock_accept()
448 lock_sock_nested(sk, SINGLE_DEPTH_NESTING); in llcp_sock_accept()
450 if (sk->sk_state != LLCP_LISTEN) { in llcp_sock_accept()
455 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK); in llcp_sock_accept()
458 add_wait_queue_exclusive(sk_sleep(sk), &wait); in llcp_sock_accept()
459 while (!(new_sk = nfc_llcp_accept_dequeue(sk, newsock))) { in llcp_sock_accept()
472 release_sock(sk); in llcp_sock_accept()
474 lock_sock_nested(sk, SINGLE_DEPTH_NESTING); in llcp_sock_accept()
477 remove_wait_queue(sk_sleep(sk), &wait); in llcp_sock_accept()
487 release_sock(sk); in llcp_sock_accept()
495 struct sock *sk = sock->sk; in llcp_sock_getname() local
496 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in llcp_sock_getname()
502 pr_debug("%p %d %d %d\n", sk, llcp_sock->target_idx, in llcp_sock_getname()
507 lock_sock(sk); in llcp_sock_getname()
509 release_sock(sk); in llcp_sock_getname()
521 release_sock(sk); in llcp_sock_getname()
529 struct sock *sk; in llcp_accept_poll() local
535 sk = &llcp_sock->sk; in llcp_accept_poll()
537 if (sk->sk_state == LLCP_CONNECTED) in llcp_accept_poll()
547 struct sock *sk = sock->sk; in llcp_sock_poll() local
550 pr_debug("%p\n", sk); in llcp_sock_poll()
554 if (sk->sk_state == LLCP_LISTEN) in llcp_sock_poll()
555 return llcp_accept_poll(sk); in llcp_sock_poll()
557 if (sk->sk_err || !skb_queue_empty_lockless(&sk->sk_error_queue)) in llcp_sock_poll()
559 (sock_flag(sk, SOCK_SELECT_ERR_QUEUE) ? EPOLLPRI : 0); in llcp_sock_poll()
561 if (!skb_queue_empty_lockless(&sk->sk_receive_queue)) in llcp_sock_poll()
564 if (sk->sk_state == LLCP_CLOSED) in llcp_sock_poll()
567 if (sk->sk_shutdown & RCV_SHUTDOWN) in llcp_sock_poll()
570 if (sk->sk_shutdown == SHUTDOWN_MASK) in llcp_sock_poll()
573 if (sock_writeable(sk) && sk->sk_state == LLCP_CONNECTED) in llcp_sock_poll()
576 sk_set_bit(SOCKWQ_ASYNC_NOSPACE, sk); in llcp_sock_poll()
585 struct sock *sk = sock->sk; in llcp_sock_release() local
587 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in llcp_sock_release()
590 if (!sk) in llcp_sock_release()
593 pr_debug("%p\n", sk); in llcp_sock_release()
601 lock_sock(sk); in llcp_sock_release()
604 if (sk->sk_state == LLCP_CONNECTED) in llcp_sock_release()
607 if (sk->sk_state == LLCP_LISTEN) { in llcp_sock_release()
613 accept_sk = &lsk->sk; in llcp_sock_release()
626 release_sock(sk); in llcp_sock_release()
632 if (sk->sk_state == LLCP_DISCONNECTING) in llcp_sock_release()
636 nfc_llcp_sock_unlink(&local->raw_sockets, sk); in llcp_sock_release()
638 nfc_llcp_sock_unlink(&local->sockets, sk); in llcp_sock_release()
641 sock_orphan(sk); in llcp_sock_release()
642 sock_put(sk); in llcp_sock_release()
650 struct sock *sk = sock->sk; in llcp_sock_connect() local
651 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in llcp_sock_connect()
657 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()
727 nfc_llcp_sock_link(&local->connecting_sockets, sk); in llcp_sock_connect()
733 sk->sk_state = LLCP_CONNECTING; in llcp_sock_connect()
735 ret = sock_wait_state(sk, LLCP_CONNECTED, in llcp_sock_connect()
736 sock_sndtimeo(sk, flags & O_NONBLOCK)); in llcp_sock_connect()
740 release_sock(sk); in llcp_sock_connect()
745 nfc_llcp_sock_unlink(&local->connecting_sockets, sk); in llcp_sock_connect()
754 release_sock(sk); in llcp_sock_connect()
761 struct sock *sk = sock->sk; in llcp_sock_sendmsg() local
762 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in llcp_sock_sendmsg()
765 pr_debug("sock %p sk %p", sock, sk); in llcp_sock_sendmsg()
767 ret = sock_error(sk); in llcp_sock_sendmsg()
774 lock_sock(sk); in llcp_sock_sendmsg()
776 if (sk->sk_type == SOCK_DGRAM) { in llcp_sock_sendmsg()
781 release_sock(sk); in llcp_sock_sendmsg()
785 release_sock(sk); in llcp_sock_sendmsg()
791 if (sk->sk_state != LLCP_CONNECTED) { in llcp_sock_sendmsg()
792 release_sock(sk); in llcp_sock_sendmsg()
796 release_sock(sk); in llcp_sock_sendmsg()
805 struct sock *sk = sock->sk; in llcp_sock_recvmsg() local
810 pr_debug("%p %zu\n", sk, len); in llcp_sock_recvmsg()
812 lock_sock(sk); in llcp_sock_recvmsg()
814 if (sk->sk_state == LLCP_CLOSED && in llcp_sock_recvmsg()
815 skb_queue_empty(&sk->sk_receive_queue)) { in llcp_sock_recvmsg()
816 release_sock(sk); in llcp_sock_recvmsg()
820 release_sock(sk); in llcp_sock_recvmsg()
825 skb = skb_recv_datagram(sk, flags, noblock, &err); in llcp_sock_recvmsg()
828 sk->sk_state, err, sock_error(sk)); in llcp_sock_recvmsg()
830 if (sk->sk_shutdown & RCV_SHUTDOWN) in llcp_sock_recvmsg()
842 skb_queue_head(&sk->sk_receive_queue, skb); in llcp_sock_recvmsg()
846 sock_recv_timestamp(msg, sk, skb); in llcp_sock_recvmsg()
848 if (sk->sk_type == SOCK_DGRAM && msg->msg_name) { in llcp_sock_recvmsg()
868 if (sk->sk_type == SOCK_STREAM || in llcp_sock_recvmsg()
869 sk->sk_type == SOCK_DGRAM || in llcp_sock_recvmsg()
870 sk->sk_type == SOCK_RAW) { in llcp_sock_recvmsg()
873 skb_queue_head(&sk->sk_receive_queue, skb); in llcp_sock_recvmsg()
885 if (sk->sk_type == SOCK_SEQPACKET && (flags & MSG_TRUNC)) in llcp_sock_recvmsg()
929 static void llcp_sock_destruct(struct sock *sk) in llcp_sock_destruct() argument
931 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in llcp_sock_destruct()
933 pr_debug("%p\n", sk); in llcp_sock_destruct()
935 if (sk->sk_state == LLCP_CONNECTED) in llcp_sock_destruct()
938 skb_queue_purge(&sk->sk_receive_queue); in llcp_sock_destruct()
942 if (!sock_flag(sk, SOCK_DEAD)) { in llcp_sock_destruct()
943 pr_err("Freeing alive NFC LLCP socket %p\n", sk); in llcp_sock_destruct()
950 struct sock *sk; in nfc_llcp_sock_alloc() local
953 sk = sk_alloc(&init_net, PF_NFC, gfp, &llcp_sock_proto, kern); in nfc_llcp_sock_alloc()
954 if (!sk) in nfc_llcp_sock_alloc()
957 llcp_sock = nfc_llcp_sock(sk); in nfc_llcp_sock_alloc()
959 sock_init_data(sock, sk); in nfc_llcp_sock_alloc()
960 sk->sk_state = LLCP_CLOSED; in nfc_llcp_sock_alloc()
961 sk->sk_protocol = NFC_SOCKPROTO_LLCP; in nfc_llcp_sock_alloc()
962 sk->sk_type = type; in nfc_llcp_sock_alloc()
963 sk->sk_destruct = llcp_sock_destruct; in nfc_llcp_sock_alloc()
981 return sk; in nfc_llcp_sock_alloc()
1001 struct sock *sk; in llcp_sock_create() local
1018 sk = nfc_llcp_sock_alloc(sock, sock->type, GFP_ATOMIC, kern); in llcp_sock_create()
1019 if (sk == NULL) in llcp_sock_create()