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()
122 nfc_llcp_sock_link(&local->sockets, sk); in llcp_sock_bind()
126 sk->sk_state = LLCP_BOUND; in llcp_sock_bind()
128 release_sock(sk); in llcp_sock_bind()
145 release_sock(sk); in llcp_sock_bind()
152 struct sock *sk = sock->sk; in llcp_raw_sock_bind() local
153 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in llcp_raw_sock_bind()
163 pr_debug("sk %p addr %p family %d\n", sk, addr, addr->sa_family); in llcp_raw_sock_bind()
169 lock_sock(sk); in llcp_raw_sock_bind()
171 if (sk->sk_state != LLCP_CLOSED) { in llcp_raw_sock_bind()
192 nfc_llcp_sock_link(&local->raw_sockets, sk); in llcp_raw_sock_bind()
194 sk->sk_state = LLCP_BOUND; in llcp_raw_sock_bind()
200 release_sock(sk); in llcp_raw_sock_bind()
206 struct sock *sk = sock->sk; in llcp_sock_listen() local
209 pr_debug("sk %p backlog %d\n", sk, backlog); in llcp_sock_listen()
211 lock_sock(sk); in llcp_sock_listen()
214 sk->sk_state != LLCP_BOUND) { in llcp_sock_listen()
219 sk->sk_max_ack_backlog = backlog; in llcp_sock_listen()
220 sk->sk_ack_backlog = 0; in llcp_sock_listen()
223 sk->sk_state = LLCP_LISTEN; in llcp_sock_listen()
226 release_sock(sk); in llcp_sock_listen()
234 struct sock *sk = sock->sk; in nfc_llcp_setsockopt() local
235 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in nfc_llcp_setsockopt()
239 pr_debug("%p optname %d\n", sk, optname); in nfc_llcp_setsockopt()
244 lock_sock(sk); in nfc_llcp_setsockopt()
248 if (sk->sk_state == LLCP_CONNECTED || in nfc_llcp_setsockopt()
249 sk->sk_state == LLCP_BOUND || in nfc_llcp_setsockopt()
250 sk->sk_state == LLCP_LISTEN) { in nfc_llcp_setsockopt()
270 if (sk->sk_state == LLCP_CONNECTED || in nfc_llcp_setsockopt()
271 sk->sk_state == LLCP_BOUND || in nfc_llcp_setsockopt()
272 sk->sk_state == LLCP_LISTEN) { in nfc_llcp_setsockopt()
296 release_sock(sk); in nfc_llcp_setsockopt()
308 struct sock *sk = sock->sk; in nfc_llcp_getsockopt() local
309 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in nfc_llcp_getsockopt()
314 pr_debug("%p optname %d\n", sk, optname); in nfc_llcp_getsockopt()
328 lock_sock(sk); in nfc_llcp_getsockopt()
373 release_sock(sk); in nfc_llcp_getsockopt()
381 void nfc_llcp_accept_unlink(struct sock *sk) in nfc_llcp_accept_unlink() argument
383 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in nfc_llcp_accept_unlink()
385 pr_debug("state %d\n", sk->sk_state); in nfc_llcp_accept_unlink()
391 sock_put(sk); in nfc_llcp_accept_unlink()
394 void nfc_llcp_accept_enqueue(struct sock *parent, struct sock *sk) in nfc_llcp_accept_enqueue() argument
396 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in nfc_llcp_accept_enqueue()
400 sock_hold(sk); in nfc_llcp_accept_enqueue()
412 struct sock *sk; in nfc_llcp_accept_dequeue() local
418 sk = &lsk->sk; in nfc_llcp_accept_dequeue()
419 lock_sock(sk); in nfc_llcp_accept_dequeue()
421 if (sk->sk_state == LLCP_CLOSED) { in nfc_llcp_accept_dequeue()
422 release_sock(sk); in nfc_llcp_accept_dequeue()
423 nfc_llcp_accept_unlink(sk); in nfc_llcp_accept_dequeue()
427 if (sk->sk_state == LLCP_CONNECTED || !newsock) { in nfc_llcp_accept_dequeue()
429 sock_put(sk); in nfc_llcp_accept_dequeue()
432 sock_graft(sk, newsock); in nfc_llcp_accept_dequeue()
434 release_sock(sk); in nfc_llcp_accept_dequeue()
436 pr_debug("Returning sk state %d\n", sk->sk_state); in nfc_llcp_accept_dequeue()
440 return sk; in nfc_llcp_accept_dequeue()
443 release_sock(sk); in nfc_llcp_accept_dequeue()
453 struct sock *sk = sock->sk, *new_sk; in llcp_sock_accept() local
457 pr_debug("parent %p\n", sk); in llcp_sock_accept()
459 lock_sock_nested(sk, SINGLE_DEPTH_NESTING); in llcp_sock_accept()
461 if (sk->sk_state != LLCP_LISTEN) { in llcp_sock_accept()
466 timeo = sock_rcvtimeo(sk, arg->flags & O_NONBLOCK); in llcp_sock_accept()
469 add_wait_queue_exclusive(sk_sleep(sk), &wait); in llcp_sock_accept()
470 while (!(new_sk = nfc_llcp_accept_dequeue(sk, newsock))) { in llcp_sock_accept()
483 release_sock(sk); in llcp_sock_accept()
485 lock_sock_nested(sk, SINGLE_DEPTH_NESTING); in llcp_sock_accept()
488 remove_wait_queue(sk_sleep(sk), &wait); in llcp_sock_accept()
498 release_sock(sk); in llcp_sock_accept()
506 struct sock *sk = sock->sk; in llcp_sock_getname() local
507 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in llcp_sock_getname()
513 pr_debug("%p %d %d %d\n", sk, llcp_sock->target_idx, in llcp_sock_getname()
518 lock_sock(sk); in llcp_sock_getname()
520 release_sock(sk); in llcp_sock_getname()
532 release_sock(sk); in llcp_sock_getname()
540 struct sock *sk; in llcp_accept_poll() local
546 sk = &llcp_sock->sk; in llcp_accept_poll()
548 if (sk->sk_state == LLCP_CONNECTED) in llcp_accept_poll()
558 struct sock *sk = sock->sk; in llcp_sock_poll() local
561 pr_debug("%p\n", sk); in llcp_sock_poll()
565 if (sk->sk_state == LLCP_LISTEN) in llcp_sock_poll()
566 return llcp_accept_poll(sk); in llcp_sock_poll()
568 if (sk->sk_err || !skb_queue_empty_lockless(&sk->sk_error_queue)) in llcp_sock_poll()
570 (sock_flag(sk, SOCK_SELECT_ERR_QUEUE) ? EPOLLPRI : 0); in llcp_sock_poll()
572 if (!skb_queue_empty_lockless(&sk->sk_receive_queue)) in llcp_sock_poll()
575 if (sk->sk_state == LLCP_CLOSED) in llcp_sock_poll()
578 if (sk->sk_shutdown & RCV_SHUTDOWN) in llcp_sock_poll()
581 if (sk->sk_shutdown == SHUTDOWN_MASK) in llcp_sock_poll()
584 if (sock_writeable(sk) && sk->sk_state == LLCP_CONNECTED) in llcp_sock_poll()
587 sk_set_bit(SOCKWQ_ASYNC_NOSPACE, sk); in llcp_sock_poll()
596 struct sock *sk = sock->sk; in llcp_sock_release() local
598 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in llcp_sock_release()
601 if (!sk) in llcp_sock_release()
604 pr_debug("%p\n", sk); in llcp_sock_release()
612 lock_sock(sk); in llcp_sock_release()
615 if (sk->sk_state == LLCP_CONNECTED) in llcp_sock_release()
618 if (sk->sk_state == LLCP_LISTEN) { in llcp_sock_release()
624 accept_sk = &lsk->sk; 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()
642 release_sock(sk); in llcp_sock_release()
645 sock_orphan(sk); in llcp_sock_release()
646 sock_put(sk); in llcp_sock_release()
654 struct sock *sk = sock->sk; in llcp_sock_connect() local
655 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in llcp_sock_connect()
661 pr_debug("sock %p sk %p flags 0x%x\n", sock, sk, flags); in llcp_sock_connect()
672 lock_sock(sk); in llcp_sock_connect()
674 if (sk->sk_state == LLCP_CONNECTED) { in llcp_sock_connect()
678 if (sk->sk_state == LLCP_CONNECTING) { in llcp_sock_connect()
735 nfc_llcp_sock_link(&local->connecting_sockets, sk); in llcp_sock_connect()
741 sk->sk_state = LLCP_CONNECTING; in llcp_sock_connect()
743 ret = sock_wait_state(sk, LLCP_CONNECTED, in llcp_sock_connect()
744 sock_sndtimeo(sk, flags & O_NONBLOCK)); in llcp_sock_connect()
748 release_sock(sk); in llcp_sock_connect()
753 nfc_llcp_sock_unlink(&local->connecting_sockets, sk); in llcp_sock_connect()
771 release_sock(sk); in llcp_sock_connect()
778 struct sock *sk = sock->sk; in llcp_sock_sendmsg() local
779 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in llcp_sock_sendmsg()
782 pr_debug("sock %p sk %p", sock, sk); in llcp_sock_sendmsg()
784 ret = sock_error(sk); in llcp_sock_sendmsg()
791 lock_sock(sk); in llcp_sock_sendmsg()
794 release_sock(sk); in llcp_sock_sendmsg()
798 if (sk->sk_type == SOCK_DGRAM) { in llcp_sock_sendmsg()
799 if (sk->sk_state != LLCP_BOUND) { in llcp_sock_sendmsg()
800 release_sock(sk); in llcp_sock_sendmsg()
808 release_sock(sk); in llcp_sock_sendmsg()
812 release_sock(sk); in llcp_sock_sendmsg()
818 if (sk->sk_state != LLCP_CONNECTED) { in llcp_sock_sendmsg()
819 release_sock(sk); in llcp_sock_sendmsg()
823 release_sock(sk); in llcp_sock_sendmsg()
831 struct sock *sk = sock->sk; in llcp_sock_recvmsg() local
836 pr_debug("%p %zu\n", sk, len); in llcp_sock_recvmsg()
838 lock_sock(sk); in llcp_sock_recvmsg()
840 if (sk->sk_state == LLCP_CLOSED && in llcp_sock_recvmsg()
841 skb_queue_empty(&sk->sk_receive_queue)) { in llcp_sock_recvmsg()
842 release_sock(sk); in llcp_sock_recvmsg()
846 release_sock(sk); in llcp_sock_recvmsg()
851 skb = skb_recv_datagram(sk, flags, &err); in llcp_sock_recvmsg()
854 sk->sk_state, err, sock_error(sk)); in llcp_sock_recvmsg()
856 if (sk->sk_shutdown & RCV_SHUTDOWN) in llcp_sock_recvmsg()
868 skb_queue_head(&sk->sk_receive_queue, skb); in llcp_sock_recvmsg()
872 sock_recv_timestamp(msg, sk, skb); in llcp_sock_recvmsg()
874 if (sk->sk_type == SOCK_DGRAM && msg->msg_name) { in llcp_sock_recvmsg()
894 if (sk->sk_type == SOCK_STREAM || in llcp_sock_recvmsg()
895 sk->sk_type == SOCK_DGRAM || in llcp_sock_recvmsg()
896 sk->sk_type == SOCK_RAW) { in llcp_sock_recvmsg()
899 skb_queue_head(&sk->sk_receive_queue, skb); in llcp_sock_recvmsg()
911 if (sk->sk_type == SOCK_SEQPACKET && (flags & MSG_TRUNC)) in llcp_sock_recvmsg()
955 static void llcp_sock_destruct(struct sock *sk) in llcp_sock_destruct() argument
957 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk); in llcp_sock_destruct()
959 pr_debug("%p\n", sk); in llcp_sock_destruct()
961 if (sk->sk_state == LLCP_CONNECTED) in llcp_sock_destruct()
964 skb_queue_purge(&sk->sk_receive_queue); in llcp_sock_destruct()
968 if (!sock_flag(sk, SOCK_DEAD)) { in llcp_sock_destruct()
969 pr_err("Freeing alive NFC LLCP socket %p\n", sk); in llcp_sock_destruct()
976 struct sock *sk; in nfc_llcp_sock_alloc() local
979 sk = sk_alloc(&init_net, PF_NFC, gfp, &llcp_sock_proto, kern); in nfc_llcp_sock_alloc()
980 if (!sk) in nfc_llcp_sock_alloc()
983 llcp_sock = nfc_llcp_sock(sk); in nfc_llcp_sock_alloc()
985 sock_init_data(sock, sk); in nfc_llcp_sock_alloc()
986 sk->sk_state = LLCP_CLOSED; in nfc_llcp_sock_alloc()
987 sk->sk_protocol = NFC_SOCKPROTO_LLCP; in nfc_llcp_sock_alloc()
988 sk->sk_type = type; in nfc_llcp_sock_alloc()
989 sk->sk_destruct = llcp_sock_destruct; in nfc_llcp_sock_alloc()
1007 return sk; in nfc_llcp_sock_alloc()
1027 struct sock *sk; in llcp_sock_create() local
1044 sk = nfc_llcp_sock_alloc(sock, sock->type, GFP_ATOMIC, kern); in llcp_sock_create()
1045 if (sk == NULL) in llcp_sock_create()