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()
395 struct sock *sk = sock->sk; in l2cap_sock_getsockopt_old() local
396 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_getsockopt_old()
402 BT_DBG("sk %p", sk); in l2cap_sock_getsockopt_old()
407 lock_sock(sk); in l2cap_sock_getsockopt_old()
469 if (sk->sk_state != BT_CONNECTED && in l2cap_sock_getsockopt_old()
470 !(sk->sk_state == BT_CONNECT2 && in l2cap_sock_getsockopt_old()
471 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) { in l2cap_sock_getsockopt_old()
491 release_sock(sk); in l2cap_sock_getsockopt_old()
498 struct sock *sk = sock->sk; in l2cap_sock_getsockopt() local
499 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_getsockopt()
504 BT_DBG("sk %p", sk); in l2cap_sock_getsockopt()
515 lock_sock(sk); in l2cap_sock_getsockopt()
530 if (sk->sk_state == BT_CONNECTED) in l2cap_sock_getsockopt()
543 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) { in l2cap_sock_getsockopt()
548 if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags), in l2cap_sock_getsockopt()
562 if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM in l2cap_sock_getsockopt()
563 && sk->sk_type != SOCK_RAW) { in l2cap_sock_getsockopt()
587 if (sk->sk_state != BT_CONNECTED) { in l2cap_sock_getsockopt()
611 release_sock(sk); in l2cap_sock_getsockopt()
634 struct sock *sk = sock->sk; in l2cap_sock_setsockopt_old() local
635 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_setsockopt_old()
640 BT_DBG("sk %p", sk); in l2cap_sock_setsockopt_old()
642 lock_sock(sk); in l2cap_sock_setsockopt_old()
651 if (sk->sk_state == BT_CONNECTED) { in l2cap_sock_setsockopt_old()
739 release_sock(sk); in l2cap_sock_setsockopt_old()
746 struct sock *sk = sock->sk; in l2cap_sock_setsockopt() local
747 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_setsockopt()
754 BT_DBG("sk %p", sk); in l2cap_sock_setsockopt()
762 lock_sock(sk); in l2cap_sock_setsockopt()
799 sk->sk_state = BT_CONFIG; in l2cap_sock_setsockopt()
803 } else if ((sk->sk_state == BT_CONNECT2 && in l2cap_sock_setsockopt()
804 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) || in l2cap_sock_setsockopt()
805 sk->sk_state == BT_CONNECTED) { in l2cap_sock_setsockopt()
807 set_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags); in l2cap_sock_setsockopt()
809 sk->sk_state_change(sk); in l2cap_sock_setsockopt()
816 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) { in l2cap_sock_setsockopt()
827 set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags); in l2cap_sock_setsockopt()
830 clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags); in l2cap_sock_setsockopt()
902 if (sk->sk_state == BT_CONNECTED && in l2cap_sock_setsockopt()
926 if (sk->sk_state == BT_CONNECTED) { in l2cap_sock_setsockopt()
944 release_sock(sk); in l2cap_sock_setsockopt()
951 struct sock *sk = sock->sk; in l2cap_sock_sendmsg() local
952 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_sendmsg()
955 BT_DBG("sock %p, sk %p", sock, sk); in l2cap_sock_sendmsg()
957 err = sock_error(sk); in l2cap_sock_sendmsg()
964 if (sk->sk_state != BT_CONNECTED) in l2cap_sock_sendmsg()
967 lock_sock(sk); in l2cap_sock_sendmsg()
968 err = bt_sock_wait_ready(sk, msg->msg_flags); in l2cap_sock_sendmsg()
969 release_sock(sk); in l2cap_sock_sendmsg()
983 struct sock *sk = sock->sk; in l2cap_sock_recvmsg() local
984 struct l2cap_pinfo *pi = l2cap_pi(sk); in l2cap_sock_recvmsg()
987 lock_sock(sk); in l2cap_sock_recvmsg()
989 if (sk->sk_state == BT_CONNECT2 && test_bit(BT_SK_DEFER_SETUP, in l2cap_sock_recvmsg()
990 &bt_sk(sk)->flags)) { in l2cap_sock_recvmsg()
992 sk->sk_state = BT_CONNECTED; in l2cap_sock_recvmsg()
996 sk->sk_state = BT_CONFIG; in l2cap_sock_recvmsg()
1005 release_sock(sk); in l2cap_sock_recvmsg()
1017 lock_sock(sk); in l2cap_sock_recvmsg()
1023 if (!__sock_queue_rcv_skb(sk, pi->rx_busy_skb)) in l2cap_sock_recvmsg()
1033 if (atomic_read(&sk->sk_rmem_alloc) <= sk->sk_rcvbuf >> 1) in l2cap_sock_recvmsg()
1037 release_sock(sk); in l2cap_sock_recvmsg()
1044 static void l2cap_sock_kill(struct sock *sk) in l2cap_sock_kill() argument
1046 if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket) in l2cap_sock_kill()
1049 BT_DBG("sk %p state %s", sk, state_to_string(sk->sk_state)); in l2cap_sock_kill()
1053 l2cap_chan_put(l2cap_pi(sk)->chan); in l2cap_sock_kill()
1054 sock_set_flag(sk, SOCK_DEAD); in l2cap_sock_kill()
1055 sock_put(sk); in l2cap_sock_kill()
1058 static int __l2cap_wait_ack(struct sock *sk, struct l2cap_chan *chan) in __l2cap_wait_ack() argument
1066 add_wait_queue(sk_sleep(sk), &wait); in __l2cap_wait_ack()
1081 release_sock(sk); in __l2cap_wait_ack()
1083 lock_sock(sk); in __l2cap_wait_ack()
1086 err = sock_error(sk); in __l2cap_wait_ack()
1099 remove_wait_queue(sk_sleep(sk), &wait); in __l2cap_wait_ack()
1105 struct sock *sk = sock->sk; in l2cap_sock_shutdown() local
1110 BT_DBG("sock %p, sk %p", sock, sk); in l2cap_sock_shutdown()
1112 if (!sk) in l2cap_sock_shutdown()
1115 lock_sock(sk); in l2cap_sock_shutdown()
1117 if (sk->sk_shutdown) in l2cap_sock_shutdown()
1123 sock_hold(sk); in l2cap_sock_shutdown()
1125 chan = l2cap_pi(sk)->chan; in l2cap_sock_shutdown()
1134 err = __l2cap_wait_ack(sk, chan); in l2cap_sock_shutdown()
1140 if (sk->sk_shutdown) in l2cap_sock_shutdown()
1144 sk->sk_shutdown = SHUTDOWN_MASK; in l2cap_sock_shutdown()
1145 release_sock(sk); in l2cap_sock_shutdown()
1167 lock_sock(sk); in l2cap_sock_shutdown()
1169 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime && in l2cap_sock_shutdown()
1171 err = bt_sock_wait_state(sk, BT_CLOSED, in l2cap_sock_shutdown()
1172 sk->sk_lingertime); in l2cap_sock_shutdown()
1176 sock_put(sk); in l2cap_sock_shutdown()
1179 if (!err && sk->sk_err) in l2cap_sock_shutdown()
1180 err = -sk->sk_err; in l2cap_sock_shutdown()
1182 release_sock(sk); in l2cap_sock_shutdown()
1191 struct sock *sk = sock->sk; in l2cap_sock_release() local
1194 BT_DBG("sock %p, sk %p", sock, sk); in l2cap_sock_release()
1196 if (!sk) in l2cap_sock_release()
1199 bt_sock_unlink(&l2cap_sk_list, sk); in l2cap_sock_release()
1203 sock_orphan(sk); in l2cap_sock_release()
1204 l2cap_sock_kill(sk); in l2cap_sock_release()
1210 struct sock *sk; in l2cap_sock_cleanup_listen() local
1216 while ((sk = bt_accept_dequeue(parent, NULL))) { in l2cap_sock_cleanup_listen()
1217 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_cleanup_listen()
1227 l2cap_sock_kill(sk); in l2cap_sock_cleanup_listen()
1233 struct sock *sk, *parent = chan->data; in l2cap_sock_new_connection_cb() local
1244 sk = l2cap_sock_alloc(sock_net(parent), NULL, BTPROTO_L2CAP, in l2cap_sock_new_connection_cb()
1246 if (!sk) { in l2cap_sock_new_connection_cb()
1251 bt_sock_reclassify_lock(sk, BTPROTO_L2CAP); in l2cap_sock_new_connection_cb()
1253 l2cap_sock_init(sk, parent); in l2cap_sock_new_connection_cb()
1255 bt_accept_enqueue(parent, sk); in l2cap_sock_new_connection_cb()
1259 return l2cap_pi(sk)->chan; in l2cap_sock_new_connection_cb()
1264 struct sock *sk = chan->data; in l2cap_sock_recv_cb() local
1267 lock_sock(sk); in l2cap_sock_recv_cb()
1269 if (l2cap_pi(sk)->rx_busy_skb) { in l2cap_sock_recv_cb()
1279 err = sk_filter(sk, skb); in l2cap_sock_recv_cb()
1284 err = __sock_queue_rcv_skb(sk, skb); in l2cap_sock_recv_cb()
1296 l2cap_pi(sk)->rx_busy_skb = skb; in l2cap_sock_recv_cb()
1302 release_sock(sk); in l2cap_sock_recv_cb()
1309 struct sock *sk = chan->data; in l2cap_sock_close_cb() local
1311 l2cap_sock_kill(sk); in l2cap_sock_close_cb()
1316 struct sock *sk = chan->data; in l2cap_sock_teardown_cb() local
1328 lock_sock_nested(sk, atomic_read(&chan->nesting)); in l2cap_sock_teardown_cb()
1330 parent = bt_sk(sk)->parent; in l2cap_sock_teardown_cb()
1332 sock_set_flag(sk, SOCK_ZAPPED); in l2cap_sock_teardown_cb()
1340 l2cap_sock_cleanup_listen(sk); in l2cap_sock_teardown_cb()
1341 sk->sk_state = BT_CLOSED; in l2cap_sock_teardown_cb()
1346 sk->sk_state = BT_CLOSED; in l2cap_sock_teardown_cb()
1349 sk->sk_err = err; in l2cap_sock_teardown_cb()
1352 bt_accept_unlink(sk); in l2cap_sock_teardown_cb()
1355 sk->sk_state_change(sk); in l2cap_sock_teardown_cb()
1361 release_sock(sk); in l2cap_sock_teardown_cb()
1367 struct sock *sk = chan->data; in l2cap_sock_state_change_cb() local
1369 sk->sk_state = state; in l2cap_sock_state_change_cb()
1372 sk->sk_err = err; in l2cap_sock_state_change_cb()
1379 struct sock *sk = chan->data; in l2cap_sock_alloc_skb_cb() local
1384 skb = bt_skb_send_alloc(sk, hdr_len + len, nb, &err); in l2cap_sock_alloc_skb_cb()
1390 skb->priority = sk->sk_priority; in l2cap_sock_alloc_skb_cb()
1399 struct sock *sk = chan->data; in l2cap_sock_ready_cb() local
1402 lock_sock(sk); in l2cap_sock_ready_cb()
1404 parent = bt_sk(sk)->parent; in l2cap_sock_ready_cb()
1406 BT_DBG("sk %p, parent %p", sk, parent); in l2cap_sock_ready_cb()
1408 sk->sk_state = BT_CONNECTED; in l2cap_sock_ready_cb()
1409 sk->sk_state_change(sk); in l2cap_sock_ready_cb()
1414 release_sock(sk); in l2cap_sock_ready_cb()
1419 struct sock *parent, *sk = chan->data; in l2cap_sock_defer_cb() local
1421 lock_sock(sk); in l2cap_sock_defer_cb()
1423 parent = bt_sk(sk)->parent; in l2cap_sock_defer_cb()
1427 release_sock(sk); in l2cap_sock_defer_cb()
1432 struct sock *sk = chan->data; in l2cap_sock_resume_cb() local
1435 sk->sk_state = BT_CONNECTED; in l2cap_sock_resume_cb()
1439 clear_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags); in l2cap_sock_resume_cb()
1440 sk->sk_state_change(sk); in l2cap_sock_resume_cb()
1445 struct sock *sk = chan->data; in l2cap_sock_set_shutdown_cb() local
1447 lock_sock(sk); in l2cap_sock_set_shutdown_cb()
1448 sk->sk_shutdown = SHUTDOWN_MASK; in l2cap_sock_set_shutdown_cb()
1449 release_sock(sk); in l2cap_sock_set_shutdown_cb()
1454 struct sock *sk = chan->data; in l2cap_sock_get_sndtimeo_cb() local
1456 return sk->sk_sndtimeo; in l2cap_sock_get_sndtimeo_cb()
1461 struct sock *sk = chan->data; in l2cap_sock_suspend_cb() local
1463 set_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags); in l2cap_sock_suspend_cb()
1464 sk->sk_state_change(sk); in l2cap_sock_suspend_cb()
1483 static void l2cap_sock_destruct(struct sock *sk) in l2cap_sock_destruct() argument
1485 BT_DBG("sk %p", sk); in l2cap_sock_destruct()
1487 if (l2cap_pi(sk)->chan) in l2cap_sock_destruct()
1488 l2cap_chan_put(l2cap_pi(sk)->chan); in l2cap_sock_destruct()
1490 if (l2cap_pi(sk)->rx_busy_skb) { in l2cap_sock_destruct()
1491 kfree_skb(l2cap_pi(sk)->rx_busy_skb); in l2cap_sock_destruct()
1492 l2cap_pi(sk)->rx_busy_skb = NULL; in l2cap_sock_destruct()
1495 skb_queue_purge(&sk->sk_receive_queue); in l2cap_sock_destruct()
1496 skb_queue_purge(&sk->sk_write_queue); in l2cap_sock_destruct()
1512 static void l2cap_sock_init(struct sock *sk, struct sock *parent) in l2cap_sock_init() argument
1514 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_init()
1516 BT_DBG("sk %p", sk); in l2cap_sock_init()
1521 sk->sk_type = parent->sk_type; in l2cap_sock_init()
1522 bt_sk(sk)->flags = bt_sk(parent)->flags; in l2cap_sock_init()
1543 security_sk_clone(parent, sk); in l2cap_sock_init()
1545 switch (sk->sk_type) { in l2cap_sock_init()
1551 bt_sk(sk)->skb_msg_name = l2cap_skb_msg_name; in l2cap_sock_init()
1561 if (!disable_ertm && sk->sk_type == SOCK_STREAM) { in l2cap_sock_init()
1574 chan->data = sk; in l2cap_sock_init()
1587 struct sock *sk; in l2cap_sock_alloc() local
1590 sk = sk_alloc(net, PF_BLUETOOTH, prio, &l2cap_proto, kern); in l2cap_sock_alloc()
1591 if (!sk) in l2cap_sock_alloc()
1594 sock_init_data(sock, sk); in l2cap_sock_alloc()
1595 INIT_LIST_HEAD(&bt_sk(sk)->accept_q); in l2cap_sock_alloc()
1597 sk->sk_destruct = l2cap_sock_destruct; in l2cap_sock_alloc()
1598 sk->sk_sndtimeo = L2CAP_CONN_TIMEOUT; in l2cap_sock_alloc()
1600 sock_reset_flag(sk, SOCK_ZAPPED); in l2cap_sock_alloc()
1602 sk->sk_protocol = proto; in l2cap_sock_alloc()
1603 sk->sk_state = BT_OPEN; in l2cap_sock_alloc()
1607 sk_free(sk); in l2cap_sock_alloc()
1613 l2cap_pi(sk)->chan = chan; in l2cap_sock_alloc()
1615 return sk; in l2cap_sock_alloc()
1621 struct sock *sk; in l2cap_sock_create() local
1636 sk = l2cap_sock_alloc(net, sock, protocol, GFP_ATOMIC, kern); in l2cap_sock_create()
1637 if (!sk) in l2cap_sock_create()
1640 l2cap_sock_init(sk, NULL); in l2cap_sock_create()
1641 bt_sock_link(&l2cap_sk_list, sk); in l2cap_sock_create()