Lines Matching refs:sk
45 static void l2cap_sock_init(struct sock *sk, struct sock *parent);
83 struct sock *sk = sock->sk; in l2cap_sock_bind() local
84 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_bind()
88 BT_DBG("sk %p", sk); in l2cap_sock_bind()
111 lock_sock(sk); in l2cap_sock_bind()
113 if (sk->sk_state != BT_OPEN) { in l2cap_sock_bind()
168 sk->sk_state = BT_BOUND; in l2cap_sock_bind()
171 release_sock(sk); in l2cap_sock_bind()
178 struct sock *sk = sock->sk; in l2cap_sock_connect() local
179 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_connect()
183 BT_DBG("sk %p", sk); in l2cap_sock_connect()
243 lock_sock(sk); in l2cap_sock_connect()
245 err = bt_sock_wait_state(sk, BT_CONNECTED, in l2cap_sock_connect()
246 sock_sndtimeo(sk, flags & O_NONBLOCK)); in l2cap_sock_connect()
248 release_sock(sk); in l2cap_sock_connect()
255 struct sock *sk = sock->sk; in l2cap_sock_listen() local
256 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_listen()
259 BT_DBG("sk %p backlog %d", sk, backlog); in l2cap_sock_listen()
261 lock_sock(sk); in l2cap_sock_listen()
263 if (sk->sk_state != BT_BOUND) { in l2cap_sock_listen()
268 if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM) { in l2cap_sock_listen()
287 sk->sk_max_ack_backlog = backlog; in l2cap_sock_listen()
288 sk->sk_ack_backlog = 0; in l2cap_sock_listen()
297 sk->sk_state = BT_LISTEN; in l2cap_sock_listen()
300 release_sock(sk); in l2cap_sock_listen()
308 struct sock *sk = sock->sk, *nsk; in l2cap_sock_accept() local
312 lock_sock_nested(sk, L2CAP_NESTING_PARENT); in l2cap_sock_accept()
314 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK); in l2cap_sock_accept()
316 BT_DBG("sk %p timeo %ld", sk, timeo); in l2cap_sock_accept()
319 add_wait_queue_exclusive(sk_sleep(sk), &wait); in l2cap_sock_accept()
321 if (sk->sk_state != BT_LISTEN) { in l2cap_sock_accept()
326 nsk = bt_accept_dequeue(sk, newsock); in l2cap_sock_accept()
340 release_sock(sk); in l2cap_sock_accept()
344 lock_sock_nested(sk, L2CAP_NESTING_PARENT); in l2cap_sock_accept()
346 remove_wait_queue(sk_sleep(sk), &wait); in l2cap_sock_accept()
356 release_sock(sk); in l2cap_sock_accept()
364 struct sock *sk = sock->sk; in l2cap_sock_getname() local
365 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_getname()
367 BT_DBG("sock %p, sk %p", sock, sk); in l2cap_sock_getname()
369 if (peer && sk->sk_state != BT_CONNECTED && in l2cap_sock_getname()
370 sk->sk_state != BT_CONNECT && sk->sk_state != BT_CONNECT2 && in l2cap_sock_getname()
371 sk->sk_state != BT_CONFIG) in l2cap_sock_getname()
396 struct sock *sk = sock->sk; in l2cap_sock_getsockopt_old() local
397 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_getsockopt_old()
403 BT_DBG("sk %p", sk); in l2cap_sock_getsockopt_old()
408 lock_sock(sk); in l2cap_sock_getsockopt_old()
470 if (sk->sk_state != BT_CONNECTED && in l2cap_sock_getsockopt_old()
471 !(sk->sk_state == BT_CONNECT2 && in l2cap_sock_getsockopt_old()
472 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) { in l2cap_sock_getsockopt_old()
492 release_sock(sk); in l2cap_sock_getsockopt_old()
499 struct sock *sk = sock->sk; in l2cap_sock_getsockopt() local
500 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_getsockopt()
505 BT_DBG("sk %p", sk); in l2cap_sock_getsockopt()
516 lock_sock(sk); in l2cap_sock_getsockopt()
531 if (sk->sk_state == BT_CONNECTED) in l2cap_sock_getsockopt()
544 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) { in l2cap_sock_getsockopt()
549 if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags), in l2cap_sock_getsockopt()
563 if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM in l2cap_sock_getsockopt()
564 && sk->sk_type != SOCK_RAW) { in l2cap_sock_getsockopt()
588 if (sk->sk_state != BT_CONNECTED) { in l2cap_sock_getsockopt()
612 release_sock(sk); in l2cap_sock_getsockopt()
635 struct sock *sk = sock->sk; in l2cap_sock_setsockopt_old() local
636 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_setsockopt_old()
641 BT_DBG("sk %p", sk); in l2cap_sock_setsockopt_old()
643 lock_sock(sk); in l2cap_sock_setsockopt_old()
652 if (sk->sk_state == BT_CONNECTED) { in l2cap_sock_setsockopt_old()
740 release_sock(sk); in l2cap_sock_setsockopt_old()
747 struct sock *sk = sock->sk; in l2cap_sock_setsockopt() local
748 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_setsockopt()
755 BT_DBG("sk %p", sk); in l2cap_sock_setsockopt()
763 lock_sock(sk); in l2cap_sock_setsockopt()
800 sk->sk_state = BT_CONFIG; in l2cap_sock_setsockopt()
804 } else if ((sk->sk_state == BT_CONNECT2 && in l2cap_sock_setsockopt()
805 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) || in l2cap_sock_setsockopt()
806 sk->sk_state == BT_CONNECTED) { in l2cap_sock_setsockopt()
808 set_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags); in l2cap_sock_setsockopt()
810 sk->sk_state_change(sk); in l2cap_sock_setsockopt()
817 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) { in l2cap_sock_setsockopt()
828 set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags); in l2cap_sock_setsockopt()
831 clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags); in l2cap_sock_setsockopt()
903 if (sk->sk_state == BT_CONNECTED && in l2cap_sock_setsockopt()
927 if (sk->sk_state == BT_CONNECTED) { in l2cap_sock_setsockopt()
945 release_sock(sk); in l2cap_sock_setsockopt()
952 struct sock *sk = sock->sk; in l2cap_sock_sendmsg() local
953 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_sendmsg()
956 BT_DBG("sock %p, sk %p", sock, sk); in l2cap_sock_sendmsg()
958 err = sock_error(sk); in l2cap_sock_sendmsg()
965 if (sk->sk_state != BT_CONNECTED) in l2cap_sock_sendmsg()
968 lock_sock(sk); in l2cap_sock_sendmsg()
969 err = bt_sock_wait_ready(sk, msg->msg_flags); in l2cap_sock_sendmsg()
970 release_sock(sk); in l2cap_sock_sendmsg()
984 struct sock *sk = sock->sk; in l2cap_sock_recvmsg() local
985 struct l2cap_pinfo *pi = l2cap_pi(sk); in l2cap_sock_recvmsg()
988 lock_sock(sk); in l2cap_sock_recvmsg()
990 if (sk->sk_state == BT_CONNECT2 && test_bit(BT_SK_DEFER_SETUP, in l2cap_sock_recvmsg()
991 &bt_sk(sk)->flags)) { in l2cap_sock_recvmsg()
993 sk->sk_state = BT_CONNECTED; in l2cap_sock_recvmsg()
997 sk->sk_state = BT_CONFIG; in l2cap_sock_recvmsg()
1006 release_sock(sk); in l2cap_sock_recvmsg()
1018 lock_sock(sk); in l2cap_sock_recvmsg()
1024 if (!__sock_queue_rcv_skb(sk, pi->rx_busy_skb)) in l2cap_sock_recvmsg()
1034 if (atomic_read(&sk->sk_rmem_alloc) <= sk->sk_rcvbuf >> 1) in l2cap_sock_recvmsg()
1038 release_sock(sk); in l2cap_sock_recvmsg()
1045 static void l2cap_sock_kill(struct sock *sk) in l2cap_sock_kill() argument
1047 if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket) in l2cap_sock_kill()
1050 BT_DBG("sk %p state %s", sk, state_to_string(sk->sk_state)); in l2cap_sock_kill()
1054 l2cap_chan_put(l2cap_pi(sk)->chan); in l2cap_sock_kill()
1055 sock_set_flag(sk, SOCK_DEAD); in l2cap_sock_kill()
1056 sock_put(sk); in l2cap_sock_kill()
1059 static int __l2cap_wait_ack(struct sock *sk, struct l2cap_chan *chan) in __l2cap_wait_ack() argument
1067 add_wait_queue(sk_sleep(sk), &wait); in __l2cap_wait_ack()
1082 release_sock(sk); in __l2cap_wait_ack()
1084 lock_sock(sk); in __l2cap_wait_ack()
1087 err = sock_error(sk); in __l2cap_wait_ack()
1100 remove_wait_queue(sk_sleep(sk), &wait); in __l2cap_wait_ack()
1106 struct sock *sk = sock->sk; in l2cap_sock_shutdown() local
1111 BT_DBG("sock %p, sk %p", sock, sk); in l2cap_sock_shutdown()
1113 if (!sk) in l2cap_sock_shutdown()
1116 lock_sock(sk); in l2cap_sock_shutdown()
1118 if (sk->sk_shutdown) in l2cap_sock_shutdown()
1124 sock_hold(sk); in l2cap_sock_shutdown()
1126 chan = l2cap_pi(sk)->chan; in l2cap_sock_shutdown()
1135 err = __l2cap_wait_ack(sk, chan); in l2cap_sock_shutdown()
1141 if (sk->sk_shutdown) in l2cap_sock_shutdown()
1145 sk->sk_shutdown = SHUTDOWN_MASK; in l2cap_sock_shutdown()
1146 release_sock(sk); in l2cap_sock_shutdown()
1168 lock_sock(sk); in l2cap_sock_shutdown()
1170 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime && in l2cap_sock_shutdown()
1172 err = bt_sock_wait_state(sk, BT_CLOSED, in l2cap_sock_shutdown()
1173 sk->sk_lingertime); in l2cap_sock_shutdown()
1177 sock_put(sk); in l2cap_sock_shutdown()
1180 if (!err && sk->sk_err) in l2cap_sock_shutdown()
1181 err = -sk->sk_err; in l2cap_sock_shutdown()
1183 release_sock(sk); in l2cap_sock_shutdown()
1192 struct sock *sk = sock->sk; in l2cap_sock_release() local
1195 BT_DBG("sock %p, sk %p", sock, sk); in l2cap_sock_release()
1197 if (!sk) in l2cap_sock_release()
1200 bt_sock_unlink(&l2cap_sk_list, sk); in l2cap_sock_release()
1204 sock_orphan(sk); in l2cap_sock_release()
1205 l2cap_sock_kill(sk); in l2cap_sock_release()
1211 struct sock *sk; in l2cap_sock_cleanup_listen() local
1217 while ((sk = bt_accept_dequeue(parent, NULL))) { in l2cap_sock_cleanup_listen()
1218 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_cleanup_listen()
1228 l2cap_sock_kill(sk); in l2cap_sock_cleanup_listen()
1234 struct sock *sk, *parent = chan->data; in l2cap_sock_new_connection_cb() local
1245 sk = l2cap_sock_alloc(sock_net(parent), NULL, BTPROTO_L2CAP, in l2cap_sock_new_connection_cb()
1247 if (!sk) { in l2cap_sock_new_connection_cb()
1252 bt_sock_reclassify_lock(sk, BTPROTO_L2CAP); in l2cap_sock_new_connection_cb()
1254 l2cap_sock_init(sk, parent); in l2cap_sock_new_connection_cb()
1256 bt_accept_enqueue(parent, sk, false); in l2cap_sock_new_connection_cb()
1260 return l2cap_pi(sk)->chan; in l2cap_sock_new_connection_cb()
1265 struct sock *sk = chan->data; in l2cap_sock_recv_cb() local
1268 lock_sock(sk); in l2cap_sock_recv_cb()
1270 if (l2cap_pi(sk)->rx_busy_skb) { in l2cap_sock_recv_cb()
1280 err = sk_filter(sk, skb); in l2cap_sock_recv_cb()
1285 err = __sock_queue_rcv_skb(sk, skb); in l2cap_sock_recv_cb()
1297 l2cap_pi(sk)->rx_busy_skb = skb; in l2cap_sock_recv_cb()
1303 release_sock(sk); in l2cap_sock_recv_cb()
1310 struct sock *sk = chan->data; in l2cap_sock_close_cb() local
1312 l2cap_sock_kill(sk); in l2cap_sock_close_cb()
1317 struct sock *sk = chan->data; in l2cap_sock_teardown_cb() local
1329 lock_sock_nested(sk, atomic_read(&chan->nesting)); in l2cap_sock_teardown_cb()
1331 parent = bt_sk(sk)->parent; in l2cap_sock_teardown_cb()
1333 sock_set_flag(sk, SOCK_ZAPPED); in l2cap_sock_teardown_cb()
1341 l2cap_sock_cleanup_listen(sk); in l2cap_sock_teardown_cb()
1342 sk->sk_state = BT_CLOSED; in l2cap_sock_teardown_cb()
1347 sk->sk_state = BT_CLOSED; in l2cap_sock_teardown_cb()
1350 sk->sk_err = err; in l2cap_sock_teardown_cb()
1353 bt_accept_unlink(sk); in l2cap_sock_teardown_cb()
1356 sk->sk_state_change(sk); in l2cap_sock_teardown_cb()
1362 release_sock(sk); in l2cap_sock_teardown_cb()
1368 struct sock *sk = chan->data; in l2cap_sock_state_change_cb() local
1370 sk->sk_state = state; in l2cap_sock_state_change_cb()
1373 sk->sk_err = err; in l2cap_sock_state_change_cb()
1380 struct sock *sk = chan->data; in l2cap_sock_alloc_skb_cb() local
1385 skb = bt_skb_send_alloc(sk, hdr_len + len, nb, &err); in l2cap_sock_alloc_skb_cb()
1391 skb->priority = sk->sk_priority; in l2cap_sock_alloc_skb_cb()
1400 struct sock *sk = chan->data; in l2cap_sock_ready_cb() local
1403 lock_sock(sk); in l2cap_sock_ready_cb()
1405 parent = bt_sk(sk)->parent; in l2cap_sock_ready_cb()
1407 BT_DBG("sk %p, parent %p", sk, parent); in l2cap_sock_ready_cb()
1409 sk->sk_state = BT_CONNECTED; in l2cap_sock_ready_cb()
1410 sk->sk_state_change(sk); in l2cap_sock_ready_cb()
1415 release_sock(sk); in l2cap_sock_ready_cb()
1420 struct sock *parent, *sk = chan->data; in l2cap_sock_defer_cb() local
1422 lock_sock(sk); in l2cap_sock_defer_cb()
1424 parent = bt_sk(sk)->parent; in l2cap_sock_defer_cb()
1428 release_sock(sk); in l2cap_sock_defer_cb()
1433 struct sock *sk = chan->data; in l2cap_sock_resume_cb() local
1436 sk->sk_state = BT_CONNECTED; in l2cap_sock_resume_cb()
1440 clear_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags); in l2cap_sock_resume_cb()
1441 sk->sk_state_change(sk); in l2cap_sock_resume_cb()
1446 struct sock *sk = chan->data; in l2cap_sock_set_shutdown_cb() local
1448 lock_sock(sk); in l2cap_sock_set_shutdown_cb()
1449 sk->sk_shutdown = SHUTDOWN_MASK; in l2cap_sock_set_shutdown_cb()
1450 release_sock(sk); in l2cap_sock_set_shutdown_cb()
1455 struct sock *sk = chan->data; in l2cap_sock_get_sndtimeo_cb() local
1457 return sk->sk_sndtimeo; in l2cap_sock_get_sndtimeo_cb()
1462 struct sock *sk = chan->data; in l2cap_sock_suspend_cb() local
1464 set_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags); in l2cap_sock_suspend_cb()
1465 sk->sk_state_change(sk); in l2cap_sock_suspend_cb()
1484 static void l2cap_sock_destruct(struct sock *sk) in l2cap_sock_destruct() argument
1486 BT_DBG("sk %p", sk); in l2cap_sock_destruct()
1488 if (l2cap_pi(sk)->chan) in l2cap_sock_destruct()
1489 l2cap_chan_put(l2cap_pi(sk)->chan); in l2cap_sock_destruct()
1491 if (l2cap_pi(sk)->rx_busy_skb) { in l2cap_sock_destruct()
1492 kfree_skb(l2cap_pi(sk)->rx_busy_skb); in l2cap_sock_destruct()
1493 l2cap_pi(sk)->rx_busy_skb = NULL; in l2cap_sock_destruct()
1496 skb_queue_purge(&sk->sk_receive_queue); in l2cap_sock_destruct()
1497 skb_queue_purge(&sk->sk_write_queue); in l2cap_sock_destruct()
1513 static void l2cap_sock_init(struct sock *sk, struct sock *parent) in l2cap_sock_init() argument
1515 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_init()
1517 BT_DBG("sk %p", sk); in l2cap_sock_init()
1522 sk->sk_type = parent->sk_type; in l2cap_sock_init()
1523 bt_sk(sk)->flags = bt_sk(parent)->flags; in l2cap_sock_init()
1544 security_sk_clone(parent, sk); in l2cap_sock_init()
1546 switch (sk->sk_type) { in l2cap_sock_init()
1552 bt_sk(sk)->skb_msg_name = l2cap_skb_msg_name; in l2cap_sock_init()
1562 if (!disable_ertm && sk->sk_type == SOCK_STREAM) { in l2cap_sock_init()
1575 chan->data = sk; in l2cap_sock_init()
1588 struct sock *sk; in l2cap_sock_alloc() local
1591 sk = sk_alloc(net, PF_BLUETOOTH, prio, &l2cap_proto, kern); in l2cap_sock_alloc()
1592 if (!sk) in l2cap_sock_alloc()
1595 sock_init_data(sock, sk); in l2cap_sock_alloc()
1596 INIT_LIST_HEAD(&bt_sk(sk)->accept_q); in l2cap_sock_alloc()
1598 sk->sk_destruct = l2cap_sock_destruct; in l2cap_sock_alloc()
1599 sk->sk_sndtimeo = L2CAP_CONN_TIMEOUT; in l2cap_sock_alloc()
1601 sock_reset_flag(sk, SOCK_ZAPPED); in l2cap_sock_alloc()
1603 sk->sk_protocol = proto; in l2cap_sock_alloc()
1604 sk->sk_state = BT_OPEN; in l2cap_sock_alloc()
1608 sk_free(sk); in l2cap_sock_alloc()
1614 l2cap_pi(sk)->chan = chan; in l2cap_sock_alloc()
1616 return sk; in l2cap_sock_alloc()
1622 struct sock *sk; in l2cap_sock_create() local
1637 sk = l2cap_sock_alloc(net, sock, protocol, GFP_ATOMIC, kern); in l2cap_sock_create()
1638 if (!sk) in l2cap_sock_create()
1641 l2cap_sock_init(sk, NULL); in l2cap_sock_create()
1642 bt_sock_link(&l2cap_sk_list, sk); in l2cap_sock_create()