• Home
  • Raw
  • Download

Lines Matching refs:sk

44 static void l2cap_sock_init(struct sock *sk, struct sock *parent);
82 struct sock *sk = sock->sk; in l2cap_sock_bind() local
83 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_bind()
87 BT_DBG("sk %p", sk); in l2cap_sock_bind()
109 lock_sock(sk); in l2cap_sock_bind()
111 if (sk->sk_state != BT_OPEN) { in l2cap_sock_bind()
166 sk->sk_state = BT_BOUND; in l2cap_sock_bind()
169 release_sock(sk); in l2cap_sock_bind()
176 struct sock *sk = sock->sk; in l2cap_sock_connect() local
177 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_connect()
181 BT_DBG("sk %p", sk); in l2cap_sock_connect()
241 lock_sock(sk); in l2cap_sock_connect()
243 err = bt_sock_wait_state(sk, BT_CONNECTED, in l2cap_sock_connect()
244 sock_sndtimeo(sk, flags & O_NONBLOCK)); in l2cap_sock_connect()
246 release_sock(sk); in l2cap_sock_connect()
253 struct sock *sk = sock->sk; in l2cap_sock_listen() local
254 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_listen()
257 BT_DBG("sk %p backlog %d", sk, backlog); in l2cap_sock_listen()
259 lock_sock(sk); in l2cap_sock_listen()
261 if (sk->sk_state != BT_BOUND) { in l2cap_sock_listen()
266 if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM) { in l2cap_sock_listen()
285 sk->sk_max_ack_backlog = backlog; in l2cap_sock_listen()
286 sk->sk_ack_backlog = 0; in l2cap_sock_listen()
295 sk->sk_state = BT_LISTEN; in l2cap_sock_listen()
298 release_sock(sk); in l2cap_sock_listen()
306 struct sock *sk = sock->sk, *nsk; in l2cap_sock_accept() local
310 lock_sock_nested(sk, L2CAP_NESTING_PARENT); in l2cap_sock_accept()
312 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK); in l2cap_sock_accept()
314 BT_DBG("sk %p timeo %ld", sk, timeo); in l2cap_sock_accept()
317 add_wait_queue_exclusive(sk_sleep(sk), &wait); in l2cap_sock_accept()
319 if (sk->sk_state != BT_LISTEN) { in l2cap_sock_accept()
324 nsk = bt_accept_dequeue(sk, newsock); in l2cap_sock_accept()
338 release_sock(sk); in l2cap_sock_accept()
342 lock_sock_nested(sk, L2CAP_NESTING_PARENT); in l2cap_sock_accept()
344 remove_wait_queue(sk_sleep(sk), &wait); in l2cap_sock_accept()
354 release_sock(sk); in l2cap_sock_accept()
362 struct sock *sk = sock->sk; in l2cap_sock_getname() local
363 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_getname()
365 BT_DBG("sock %p, sk %p", sock, sk); in l2cap_sock_getname()
367 if (peer && sk->sk_state != BT_CONNECTED && in l2cap_sock_getname()
368 sk->sk_state != BT_CONNECT && sk->sk_state != BT_CONNECT2 && in l2cap_sock_getname()
369 sk->sk_state != BT_CONFIG) in l2cap_sock_getname()
394 struct sock *sk = sock->sk; in l2cap_sock_getsockopt_old() local
395 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_getsockopt_old()
401 BT_DBG("sk %p", sk); in l2cap_sock_getsockopt_old()
406 lock_sock(sk); in l2cap_sock_getsockopt_old()
468 if (sk->sk_state != BT_CONNECTED && in l2cap_sock_getsockopt_old()
469 !(sk->sk_state == BT_CONNECT2 && in l2cap_sock_getsockopt_old()
470 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) { in l2cap_sock_getsockopt_old()
490 release_sock(sk); in l2cap_sock_getsockopt_old()
497 struct sock *sk = sock->sk; in l2cap_sock_getsockopt() local
498 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_getsockopt()
503 BT_DBG("sk %p", sk); in l2cap_sock_getsockopt()
514 lock_sock(sk); in l2cap_sock_getsockopt()
529 if (sk->sk_state == BT_CONNECTED) in l2cap_sock_getsockopt()
542 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) { in l2cap_sock_getsockopt()
547 if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags), in l2cap_sock_getsockopt()
561 if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM in l2cap_sock_getsockopt()
562 && sk->sk_type != SOCK_RAW) { in l2cap_sock_getsockopt()
586 if (sk->sk_state != BT_CONNECTED) { in l2cap_sock_getsockopt()
610 release_sock(sk); in l2cap_sock_getsockopt()
633 struct sock *sk = sock->sk; in l2cap_sock_setsockopt_old() local
634 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_setsockopt_old()
639 BT_DBG("sk %p", sk); in l2cap_sock_setsockopt_old()
641 lock_sock(sk); in l2cap_sock_setsockopt_old()
650 if (sk->sk_state == BT_CONNECTED) { in l2cap_sock_setsockopt_old()
738 release_sock(sk); in l2cap_sock_setsockopt_old()
745 struct sock *sk = sock->sk; in l2cap_sock_setsockopt() local
746 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_setsockopt()
753 BT_DBG("sk %p", sk); in l2cap_sock_setsockopt()
761 lock_sock(sk); in l2cap_sock_setsockopt()
798 sk->sk_state = BT_CONFIG; in l2cap_sock_setsockopt()
802 } else if ((sk->sk_state == BT_CONNECT2 && in l2cap_sock_setsockopt()
803 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) || in l2cap_sock_setsockopt()
804 sk->sk_state == BT_CONNECTED) { in l2cap_sock_setsockopt()
806 set_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags); in l2cap_sock_setsockopt()
808 sk->sk_state_change(sk); in l2cap_sock_setsockopt()
815 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) { in l2cap_sock_setsockopt()
826 set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags); in l2cap_sock_setsockopt()
829 clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags); in l2cap_sock_setsockopt()
901 if (sk->sk_state == BT_CONNECTED && in l2cap_sock_setsockopt()
925 if (sk->sk_state == BT_CONNECTED) { in l2cap_sock_setsockopt()
943 release_sock(sk); in l2cap_sock_setsockopt()
950 struct sock *sk = sock->sk; in l2cap_sock_sendmsg() local
951 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_sendmsg()
954 BT_DBG("sock %p, sk %p", sock, sk); in l2cap_sock_sendmsg()
956 err = sock_error(sk); in l2cap_sock_sendmsg()
963 if (sk->sk_state != BT_CONNECTED) in l2cap_sock_sendmsg()
966 lock_sock(sk); in l2cap_sock_sendmsg()
967 err = bt_sock_wait_ready(sk, msg->msg_flags); in l2cap_sock_sendmsg()
968 release_sock(sk); in l2cap_sock_sendmsg()
982 struct sock *sk = sock->sk; in l2cap_sock_recvmsg() local
983 struct l2cap_pinfo *pi = l2cap_pi(sk); in l2cap_sock_recvmsg()
986 lock_sock(sk); in l2cap_sock_recvmsg()
988 if (sk->sk_state == BT_CONNECT2 && test_bit(BT_SK_DEFER_SETUP, in l2cap_sock_recvmsg()
989 &bt_sk(sk)->flags)) { in l2cap_sock_recvmsg()
991 sk->sk_state = BT_CONNECTED; in l2cap_sock_recvmsg()
995 sk->sk_state = BT_CONFIG; in l2cap_sock_recvmsg()
1004 release_sock(sk); in l2cap_sock_recvmsg()
1016 lock_sock(sk); in l2cap_sock_recvmsg()
1022 if (!__sock_queue_rcv_skb(sk, pi->rx_busy_skb)) in l2cap_sock_recvmsg()
1032 if (atomic_read(&sk->sk_rmem_alloc) <= sk->sk_rcvbuf >> 1) in l2cap_sock_recvmsg()
1036 release_sock(sk); in l2cap_sock_recvmsg()
1043 static void l2cap_sock_kill(struct sock *sk) in l2cap_sock_kill() argument
1045 if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket) in l2cap_sock_kill()
1048 BT_DBG("sk %p state %s", sk, state_to_string(sk->sk_state)); in l2cap_sock_kill()
1052 l2cap_chan_put(l2cap_pi(sk)->chan); in l2cap_sock_kill()
1053 sock_set_flag(sk, SOCK_DEAD); in l2cap_sock_kill()
1054 sock_put(sk); in l2cap_sock_kill()
1057 static int __l2cap_wait_ack(struct sock *sk, struct l2cap_chan *chan) in __l2cap_wait_ack() argument
1065 add_wait_queue(sk_sleep(sk), &wait); in __l2cap_wait_ack()
1080 release_sock(sk); in __l2cap_wait_ack()
1082 lock_sock(sk); in __l2cap_wait_ack()
1085 err = sock_error(sk); in __l2cap_wait_ack()
1098 remove_wait_queue(sk_sleep(sk), &wait); in __l2cap_wait_ack()
1104 struct sock *sk = sock->sk; in l2cap_sock_shutdown() local
1109 BT_DBG("sock %p, sk %p", sock, sk); in l2cap_sock_shutdown()
1111 if (!sk) in l2cap_sock_shutdown()
1114 lock_sock(sk); in l2cap_sock_shutdown()
1116 if (sk->sk_shutdown) in l2cap_sock_shutdown()
1122 sock_hold(sk); in l2cap_sock_shutdown()
1124 chan = l2cap_pi(sk)->chan; in l2cap_sock_shutdown()
1133 err = __l2cap_wait_ack(sk, chan); in l2cap_sock_shutdown()
1139 if (sk->sk_shutdown) in l2cap_sock_shutdown()
1143 sk->sk_shutdown = SHUTDOWN_MASK; in l2cap_sock_shutdown()
1144 release_sock(sk); in l2cap_sock_shutdown()
1166 lock_sock(sk); in l2cap_sock_shutdown()
1168 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime && in l2cap_sock_shutdown()
1170 err = bt_sock_wait_state(sk, BT_CLOSED, in l2cap_sock_shutdown()
1171 sk->sk_lingertime); in l2cap_sock_shutdown()
1175 sock_put(sk); in l2cap_sock_shutdown()
1178 if (!err && sk->sk_err) in l2cap_sock_shutdown()
1179 err = -sk->sk_err; in l2cap_sock_shutdown()
1181 release_sock(sk); in l2cap_sock_shutdown()
1190 struct sock *sk = sock->sk; in l2cap_sock_release() local
1193 BT_DBG("sock %p, sk %p", sock, sk); in l2cap_sock_release()
1195 if (!sk) in l2cap_sock_release()
1198 bt_sock_unlink(&l2cap_sk_list, sk); in l2cap_sock_release()
1202 sock_orphan(sk); in l2cap_sock_release()
1203 l2cap_sock_kill(sk); in l2cap_sock_release()
1209 struct sock *sk; in l2cap_sock_cleanup_listen() local
1215 while ((sk = bt_accept_dequeue(parent, NULL))) { in l2cap_sock_cleanup_listen()
1216 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_cleanup_listen()
1226 l2cap_sock_kill(sk); in l2cap_sock_cleanup_listen()
1232 struct sock *sk, *parent = chan->data; in l2cap_sock_new_connection_cb() local
1243 sk = l2cap_sock_alloc(sock_net(parent), NULL, BTPROTO_L2CAP, in l2cap_sock_new_connection_cb()
1245 if (!sk) { in l2cap_sock_new_connection_cb()
1250 bt_sock_reclassify_lock(sk, BTPROTO_L2CAP); in l2cap_sock_new_connection_cb()
1252 l2cap_sock_init(sk, parent); in l2cap_sock_new_connection_cb()
1254 bt_accept_enqueue(parent, sk); in l2cap_sock_new_connection_cb()
1258 return l2cap_pi(sk)->chan; in l2cap_sock_new_connection_cb()
1263 struct sock *sk = chan->data; in l2cap_sock_recv_cb() local
1266 lock_sock(sk); in l2cap_sock_recv_cb()
1268 if (l2cap_pi(sk)->rx_busy_skb) { in l2cap_sock_recv_cb()
1278 err = sk_filter(sk, skb); in l2cap_sock_recv_cb()
1283 err = __sock_queue_rcv_skb(sk, skb); in l2cap_sock_recv_cb()
1295 l2cap_pi(sk)->rx_busy_skb = skb; in l2cap_sock_recv_cb()
1301 release_sock(sk); in l2cap_sock_recv_cb()
1308 struct sock *sk = chan->data; in l2cap_sock_close_cb() local
1310 l2cap_sock_kill(sk); in l2cap_sock_close_cb()
1315 struct sock *sk = chan->data; in l2cap_sock_teardown_cb() local
1327 lock_sock_nested(sk, atomic_read(&chan->nesting)); in l2cap_sock_teardown_cb()
1329 parent = bt_sk(sk)->parent; in l2cap_sock_teardown_cb()
1331 sock_set_flag(sk, SOCK_ZAPPED); in l2cap_sock_teardown_cb()
1339 l2cap_sock_cleanup_listen(sk); in l2cap_sock_teardown_cb()
1340 sk->sk_state = BT_CLOSED; in l2cap_sock_teardown_cb()
1345 sk->sk_state = BT_CLOSED; in l2cap_sock_teardown_cb()
1348 sk->sk_err = err; in l2cap_sock_teardown_cb()
1351 bt_accept_unlink(sk); in l2cap_sock_teardown_cb()
1354 sk->sk_state_change(sk); in l2cap_sock_teardown_cb()
1360 release_sock(sk); in l2cap_sock_teardown_cb()
1366 struct sock *sk = chan->data; in l2cap_sock_state_change_cb() local
1368 sk->sk_state = state; in l2cap_sock_state_change_cb()
1371 sk->sk_err = err; in l2cap_sock_state_change_cb()
1378 struct sock *sk = chan->data; in l2cap_sock_alloc_skb_cb() local
1383 skb = bt_skb_send_alloc(sk, hdr_len + len, nb, &err); in l2cap_sock_alloc_skb_cb()
1389 skb->priority = sk->sk_priority; in l2cap_sock_alloc_skb_cb()
1398 struct sock *sk = chan->data; in l2cap_sock_ready_cb() local
1401 lock_sock(sk); in l2cap_sock_ready_cb()
1403 parent = bt_sk(sk)->parent; in l2cap_sock_ready_cb()
1405 BT_DBG("sk %p, parent %p", sk, parent); in l2cap_sock_ready_cb()
1407 sk->sk_state = BT_CONNECTED; in l2cap_sock_ready_cb()
1408 sk->sk_state_change(sk); in l2cap_sock_ready_cb()
1413 release_sock(sk); in l2cap_sock_ready_cb()
1418 struct sock *parent, *sk = chan->data; in l2cap_sock_defer_cb() local
1420 lock_sock(sk); in l2cap_sock_defer_cb()
1422 parent = bt_sk(sk)->parent; in l2cap_sock_defer_cb()
1426 release_sock(sk); in l2cap_sock_defer_cb()
1431 struct sock *sk = chan->data; in l2cap_sock_resume_cb() local
1434 sk->sk_state = BT_CONNECTED; in l2cap_sock_resume_cb()
1438 clear_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags); in l2cap_sock_resume_cb()
1439 sk->sk_state_change(sk); in l2cap_sock_resume_cb()
1444 struct sock *sk = chan->data; in l2cap_sock_set_shutdown_cb() local
1446 lock_sock(sk); in l2cap_sock_set_shutdown_cb()
1447 sk->sk_shutdown = SHUTDOWN_MASK; in l2cap_sock_set_shutdown_cb()
1448 release_sock(sk); in l2cap_sock_set_shutdown_cb()
1453 struct sock *sk = chan->data; in l2cap_sock_get_sndtimeo_cb() local
1455 return sk->sk_sndtimeo; in l2cap_sock_get_sndtimeo_cb()
1460 struct sock *sk = chan->data; in l2cap_sock_suspend_cb() local
1462 set_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags); in l2cap_sock_suspend_cb()
1463 sk->sk_state_change(sk); in l2cap_sock_suspend_cb()
1482 static void l2cap_sock_destruct(struct sock *sk) in l2cap_sock_destruct() argument
1484 BT_DBG("sk %p", sk); in l2cap_sock_destruct()
1486 if (l2cap_pi(sk)->chan) in l2cap_sock_destruct()
1487 l2cap_chan_put(l2cap_pi(sk)->chan); in l2cap_sock_destruct()
1489 if (l2cap_pi(sk)->rx_busy_skb) { in l2cap_sock_destruct()
1490 kfree_skb(l2cap_pi(sk)->rx_busy_skb); in l2cap_sock_destruct()
1491 l2cap_pi(sk)->rx_busy_skb = NULL; in l2cap_sock_destruct()
1494 skb_queue_purge(&sk->sk_receive_queue); in l2cap_sock_destruct()
1495 skb_queue_purge(&sk->sk_write_queue); in l2cap_sock_destruct()
1511 static void l2cap_sock_init(struct sock *sk, struct sock *parent) in l2cap_sock_init() argument
1513 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_init()
1515 BT_DBG("sk %p", sk); in l2cap_sock_init()
1520 sk->sk_type = parent->sk_type; in l2cap_sock_init()
1521 bt_sk(sk)->flags = bt_sk(parent)->flags; in l2cap_sock_init()
1542 security_sk_clone(parent, sk); in l2cap_sock_init()
1544 switch (sk->sk_type) { in l2cap_sock_init()
1550 bt_sk(sk)->skb_msg_name = l2cap_skb_msg_name; in l2cap_sock_init()
1560 if (!disable_ertm && sk->sk_type == SOCK_STREAM) { in l2cap_sock_init()
1573 chan->data = sk; in l2cap_sock_init()
1586 struct sock *sk; in l2cap_sock_alloc() local
1589 sk = sk_alloc(net, PF_BLUETOOTH, prio, &l2cap_proto, kern); in l2cap_sock_alloc()
1590 if (!sk) in l2cap_sock_alloc()
1593 sock_init_data(sock, sk); in l2cap_sock_alloc()
1594 INIT_LIST_HEAD(&bt_sk(sk)->accept_q); in l2cap_sock_alloc()
1596 sk->sk_destruct = l2cap_sock_destruct; in l2cap_sock_alloc()
1597 sk->sk_sndtimeo = L2CAP_CONN_TIMEOUT; in l2cap_sock_alloc()
1599 sock_reset_flag(sk, SOCK_ZAPPED); in l2cap_sock_alloc()
1601 sk->sk_protocol = proto; in l2cap_sock_alloc()
1602 sk->sk_state = BT_OPEN; in l2cap_sock_alloc()
1606 sk_free(sk); in l2cap_sock_alloc()
1612 l2cap_pi(sk)->chan = chan; in l2cap_sock_alloc()
1614 return sk; in l2cap_sock_alloc()
1620 struct sock *sk; in l2cap_sock_create() local
1635 sk = l2cap_sock_alloc(net, sock, protocol, GFP_ATOMIC, kern); in l2cap_sock_create()
1636 if (!sk) in l2cap_sock_create()
1639 l2cap_sock_init(sk, NULL); in l2cap_sock_create()
1640 bt_sock_link(&l2cap_sk_list, sk); in l2cap_sock_create()