Lines Matching refs:nlk

279 	struct netlink_sock *nlk = nlk_sk(sk);  in netlink_overrun()  local
281 if (!(nlk->flags & NETLINK_RECV_NO_ENOBUFS)) { in netlink_overrun()
292 struct netlink_sock *nlk = nlk_sk(sk); in netlink_rcv_wake() local
295 clear_bit(NETLINK_CONGESTED, &nlk->state); in netlink_rcv_wake()
296 if (!test_bit(NETLINK_CONGESTED, &nlk->state)) in netlink_rcv_wake()
297 wake_up_interruptible(&nlk->wait); in netlink_rcv_wake()
352 static void **alloc_pg_vec(struct netlink_sock *nlk, in alloc_pg_vec() argument
380 struct netlink_sock *nlk = nlk_sk(sk); in __netlink_set_ring() local
385 ring = tx_ring ? &nlk->tx_ring : &nlk->rx_ring; in __netlink_set_ring()
401 WARN_ON(atomic_read(&nlk->mapped)); in __netlink_set_ring()
410 struct netlink_sock *nlk = nlk_sk(sk); in netlink_set_ring() local
415 ring = tx_ring ? &nlk->tx_ring : &nlk->rx_ring; in netlink_set_ring()
417 if (atomic_read(&nlk->mapped)) in netlink_set_ring()
444 pg_vec = alloc_pg_vec(nlk, req, order); in netlink_set_ring()
452 mutex_lock(&nlk->pg_vec_lock); in netlink_set_ring()
453 if (atomic_read(&nlk->mapped) == 0) { in netlink_set_ring()
455 mutex_unlock(&nlk->pg_vec_lock); in netlink_set_ring()
459 mutex_unlock(&nlk->pg_vec_lock); in netlink_set_ring()
496 struct netlink_sock *nlk = nlk_sk(sk); in netlink_mmap() local
505 mutex_lock(&nlk->pg_vec_lock); in netlink_mmap()
508 for (ring = &nlk->rx_ring; ring <= &nlk->tx_ring; ring++) { in netlink_mmap()
522 for (ring = &nlk->rx_ring; ring <= &nlk->tx_ring; ring++) { in netlink_mmap()
542 atomic_inc(&nlk->mapped); in netlink_mmap()
546 mutex_unlock(&nlk->pg_vec_lock); in netlink_mmap()
641 static bool netlink_dump_space(struct netlink_sock *nlk) in netlink_dump_space() argument
643 struct netlink_ring *ring = &nlk->rx_ring; in netlink_dump_space()
664 struct netlink_sock *nlk = nlk_sk(sk); in netlink_poll() local
668 if (nlk->rx_ring.pg_vec != NULL) { in netlink_poll()
673 while (nlk->cb_running && netlink_dump_space(nlk)) { in netlink_poll()
687 if (nlk->rx_ring.pg_vec) { in netlink_poll()
688 netlink_forward_ring(&nlk->rx_ring); in netlink_poll()
689 if (!netlink_previous_frame(&nlk->rx_ring, NL_MMAP_STATUS_UNUSED)) in netlink_poll()
695 if (nlk->tx_ring.pg_vec) { in netlink_poll()
696 if (netlink_current_frame(&nlk->tx_ring, NL_MMAP_STATUS_UNUSED)) in netlink_poll()
734 struct netlink_sock *nlk = nlk_sk(sk); in netlink_mmap_sendmsg() local
741 mutex_lock(&nlk->pg_vec_lock); in netlink_mmap_sendmsg()
743 ring = &nlk->tx_ring; in netlink_mmap_sendmsg()
752 atomic_read(&nlk->tx_ring.pending)) in netlink_mmap_sendmsg()
776 NETLINK_CB(skb).portid = nlk->portid; in netlink_mmap_sendmsg()
799 atomic_read(&nlk->tx_ring.pending))); in netlink_mmap_sendmsg()
804 mutex_unlock(&nlk->pg_vec_lock); in netlink_mmap_sendmsg()
827 struct netlink_sock *nlk = nlk_sk(sk); in netlink_ring_set_copied() local
828 struct netlink_ring *ring = &nlk->rx_ring; in netlink_ring_set_copied()
915 struct netlink_sock *nlk = nlk_sk(sk); in netlink_sock_destruct() local
917 if (nlk->cb_running) { in netlink_sock_destruct()
918 if (nlk->cb.done) in netlink_sock_destruct()
919 nlk->cb.done(&nlk->cb); in netlink_sock_destruct()
921 module_put(nlk->cb.module); in netlink_sock_destruct()
922 kfree_skb(nlk->cb.skb); in netlink_sock_destruct()
931 if (nlk->rx_ring.pg_vec) in netlink_sock_destruct()
934 if (nlk->tx_ring.pg_vec) in netlink_sock_destruct()
1018 const struct netlink_sock *nlk = ptr; in netlink_compare() local
1020 return nlk->portid != x->portid || in netlink_compare()
1021 !net_eq(sock_net(&nlk->sk), read_pnet(&x->pnet)); in netlink_compare()
1164 struct netlink_sock *nlk; in __netlink_create() local
1174 nlk = nlk_sk(sk); in __netlink_create()
1176 nlk->cb_mutex = cb_mutex; in __netlink_create()
1178 nlk->cb_mutex = &nlk->cb_def_mutex; in __netlink_create()
1179 mutex_init(nlk->cb_mutex); in __netlink_create()
1181 init_waitqueue_head(&nlk->wait); in __netlink_create()
1183 mutex_init(&nlk->pg_vec_lock); in __netlink_create()
1196 struct netlink_sock *nlk; in netlink_create() local
1238 nlk = nlk_sk(sock->sk); in netlink_create()
1239 nlk->module = module; in netlink_create()
1240 nlk->netlink_bind = bind; in netlink_create()
1241 nlk->netlink_unbind = unbind; in netlink_create()
1252 struct netlink_sock *nlk = container_of(head, struct netlink_sock, rcu); in deferred_put_nlk_sk() local
1254 sock_put(&nlk->sk); in deferred_put_nlk_sk()
1260 struct netlink_sock *nlk; in netlink_release() local
1267 nlk = nlk_sk(sk); in netlink_release()
1277 if (nlk->netlink_unbind) { in netlink_release()
1280 for (i = 0; i < nlk->ngroups; i++) in netlink_release()
1281 if (test_bit(i, nlk->groups)) in netlink_release()
1282 nlk->netlink_unbind(sock_net(sk), i + 1); in netlink_release()
1289 wake_up_interruptible_all(&nlk->wait); in netlink_release()
1293 if (nlk->portid && nlk->bound) { in netlink_release()
1297 .portid = nlk->portid, in netlink_release()
1303 module_put(nlk->module); in netlink_release()
1323 kfree(nlk->groups); in netlink_release()
1324 nlk->groups = NULL; in netlink_release()
1329 call_rcu(&nlk->rcu, deferred_put_nlk_sk); in netlink_release()
1442 struct netlink_sock *nlk = nlk_sk(sk); in netlink_update_subscriptions() local
1444 if (nlk->subscriptions && !subscriptions) in netlink_update_subscriptions()
1446 else if (!nlk->subscriptions && subscriptions) in netlink_update_subscriptions()
1448 nlk->subscriptions = subscriptions; in netlink_update_subscriptions()
1453 struct netlink_sock *nlk = nlk_sk(sk); in netlink_realloc_groups() local
1466 if (nlk->ngroups >= groups) in netlink_realloc_groups()
1469 new_groups = krealloc(nlk->groups, NLGRPSZ(groups), GFP_ATOMIC); in netlink_realloc_groups()
1474 memset((char *)new_groups + NLGRPSZ(nlk->ngroups), 0, in netlink_realloc_groups()
1475 NLGRPSZ(groups) - NLGRPSZ(nlk->ngroups)); in netlink_realloc_groups()
1477 nlk->groups = new_groups; in netlink_realloc_groups()
1478 nlk->ngroups = groups; in netlink_realloc_groups()
1487 struct netlink_sock *nlk = nlk_sk(sk); in netlink_undo_bind() local
1490 if (!nlk->netlink_unbind) in netlink_undo_bind()
1495 nlk->netlink_unbind(sock_net(sk), undo + 1); in netlink_undo_bind()
1503 struct netlink_sock *nlk = nlk_sk(sk); in netlink_bind() local
1524 bound = nlk->bound; in netlink_bind()
1529 if (nladdr->nl_pid != nlk->portid) in netlink_bind()
1533 if (nlk->netlink_bind && groups) { in netlink_bind()
1536 for (group = 0; group < nlk->ngroups; group++) { in netlink_bind()
1539 err = nlk->netlink_bind(net, group + 1); in netlink_bind()
1555 netlink_undo_bind(nlk->ngroups, groups, sk); in netlink_bind()
1560 if (!groups && (nlk->groups == NULL || !(u32)nlk->groups[0])) in netlink_bind()
1564 netlink_update_subscriptions(sk, nlk->subscriptions + in netlink_bind()
1566 hweight32(nlk->groups[0])); in netlink_bind()
1567 nlk->groups[0] = (nlk->groups[0] & ~0xffffffffUL) | groups; in netlink_bind()
1579 struct netlink_sock *nlk = nlk_sk(sk); in netlink_connect() local
1587 nlk->dst_portid = 0; in netlink_connect()
1588 nlk->dst_group = 0; in netlink_connect()
1601 if (!nlk->bound) in netlink_connect()
1606 nlk->dst_portid = nladdr->nl_pid; in netlink_connect()
1607 nlk->dst_group = ffs(nladdr->nl_groups); in netlink_connect()
1617 struct netlink_sock *nlk = nlk_sk(sk); in netlink_getname() local
1625 nladdr->nl_pid = nlk->dst_portid; in netlink_getname()
1626 nladdr->nl_groups = netlink_group_mask(nlk->dst_group); in netlink_getname()
1628 nladdr->nl_pid = nlk->portid; in netlink_getname()
1629 nladdr->nl_groups = nlk->groups ? nlk->groups[0] : 0; in netlink_getname()
1637 struct netlink_sock *nlk; in netlink_getsockbyportid() local
1644 nlk = nlk_sk(sock); in netlink_getsockbyportid()
1646 nlk->dst_portid != nlk_sk(ssk)->portid) { in netlink_getsockbyportid()
1707 struct netlink_sock *nlk; in netlink_attachskb() local
1709 nlk = nlk_sk(sk); in netlink_attachskb()
1712 test_bit(NETLINK_CONGESTED, &nlk->state)) && in netlink_attachskb()
1724 add_wait_queue(&nlk->wait, &wait); in netlink_attachskb()
1727 test_bit(NETLINK_CONGESTED, &nlk->state)) && in netlink_attachskb()
1732 remove_wait_queue(&nlk->wait, &wait); in netlink_attachskb()
1807 struct netlink_sock *nlk = nlk_sk(sk); in netlink_unicast_kernel() local
1810 if (nlk->netlink_rcv != NULL) { in netlink_unicast_kernel()
1815 nlk->netlink_rcv(skb); in netlink_unicast_kernel()
1948 struct netlink_sock *nlk = nlk_sk(sk); in netlink_broadcast_deliver() local
1951 !test_bit(NETLINK_CONGESTED, &nlk->state)) { in netlink_broadcast_deliver()
1977 struct netlink_sock *nlk = nlk_sk(sk); in do_one_broadcast() local
1983 if (nlk->portid == p->portid || p->group - 1 >= nlk->ngroups || in do_one_broadcast()
1984 !test_bit(p->group - 1, nlk->groups)) in do_one_broadcast()
2012 if (nlk->flags & NETLINK_BROADCAST_SEND_ERROR) in do_one_broadcast()
2022 if (nlk->flags & NETLINK_BROADCAST_SEND_ERROR) in do_one_broadcast()
2100 struct netlink_sock *nlk = nlk_sk(sk); in do_one_set_err() local
2109 if (nlk->portid == p->portid || p->group - 1 >= nlk->ngroups || in do_one_set_err()
2110 !test_bit(p->group - 1, nlk->groups)) in do_one_set_err()
2113 if (p->code == ENOBUFS && nlk->flags & NETLINK_RECV_NO_ENOBUFS) { in do_one_set_err()
2157 static void netlink_update_socket_mc(struct netlink_sock *nlk, in netlink_update_socket_mc() argument
2163 old = test_bit(group - 1, nlk->groups); in netlink_update_socket_mc()
2164 subscriptions = nlk->subscriptions - old + new; in netlink_update_socket_mc()
2166 __set_bit(group - 1, nlk->groups); in netlink_update_socket_mc()
2168 __clear_bit(group - 1, nlk->groups); in netlink_update_socket_mc()
2169 netlink_update_subscriptions(&nlk->sk, subscriptions); in netlink_update_socket_mc()
2170 netlink_update_listeners(&nlk->sk); in netlink_update_socket_mc()
2177 struct netlink_sock *nlk = nlk_sk(sk); in netlink_setsockopt() local
2192 nlk->flags |= NETLINK_RECV_PKTINFO; in netlink_setsockopt()
2194 nlk->flags &= ~NETLINK_RECV_PKTINFO; in netlink_setsockopt()
2204 if (!val || val - 1 >= nlk->ngroups) in netlink_setsockopt()
2206 if (optname == NETLINK_ADD_MEMBERSHIP && nlk->netlink_bind) { in netlink_setsockopt()
2207 err = nlk->netlink_bind(sock_net(sk), val); in netlink_setsockopt()
2212 netlink_update_socket_mc(nlk, val, in netlink_setsockopt()
2215 if (optname == NETLINK_DROP_MEMBERSHIP && nlk->netlink_unbind) in netlink_setsockopt()
2216 nlk->netlink_unbind(sock_net(sk), val); in netlink_setsockopt()
2223 nlk->flags |= NETLINK_BROADCAST_SEND_ERROR; in netlink_setsockopt()
2225 nlk->flags &= ~NETLINK_BROADCAST_SEND_ERROR; in netlink_setsockopt()
2230 nlk->flags |= NETLINK_RECV_NO_ENOBUFS; in netlink_setsockopt()
2231 clear_bit(NETLINK_CONGESTED, &nlk->state); in netlink_setsockopt()
2232 wake_up_interruptible(&nlk->wait); in netlink_setsockopt()
2234 nlk->flags &= ~NETLINK_RECV_NO_ENOBUFS; in netlink_setsockopt()
2267 struct netlink_sock *nlk = nlk_sk(sk); in netlink_getsockopt() local
2283 val = nlk->flags & NETLINK_RECV_PKTINFO ? 1 : 0; in netlink_getsockopt()
2293 val = nlk->flags & NETLINK_BROADCAST_SEND_ERROR ? 1 : 0; in netlink_getsockopt()
2303 val = nlk->flags & NETLINK_RECV_NO_ENOBUFS ? 1 : 0; in netlink_getsockopt()
2326 struct netlink_sock *nlk = nlk_sk(sk); in netlink_sendmsg() local
2354 dst_portid = nlk->dst_portid; in netlink_sendmsg()
2355 dst_group = nlk->dst_group; in netlink_sendmsg()
2358 if (!nlk->bound) { in netlink_sendmsg()
2387 NETLINK_CB(skb).portid = nlk->portid; in netlink_sendmsg()
2420 struct netlink_sock *nlk = nlk_sk(sk); in netlink_recvmsg() local
2455 nlk->max_recvmsg_len = max(nlk->max_recvmsg_len, len); in netlink_recvmsg()
2456 nlk->max_recvmsg_len = min_t(size_t, nlk->max_recvmsg_len, in netlink_recvmsg()
2477 if (nlk->flags & NETLINK_RECV_PKTINFO) in netlink_recvmsg()
2487 if (nlk->cb_running && in netlink_recvmsg()
2519 struct netlink_sock *nlk; in __netlink_kernel_create() local
2560 nlk = nlk_sk(sk); in __netlink_kernel_create()
2561 nlk->flags |= NETLINK_KERNEL_SOCKET; in __netlink_kernel_create()
2682 struct netlink_sock *nlk = nlk_sk(sk); in netlink_dump() local
2690 mutex_lock(nlk->cb_mutex); in netlink_dump()
2691 if (!nlk->cb_running) { in netlink_dump()
2705 cb = &nlk->cb; in netlink_dump()
2708 if (alloc_min_size < nlk->max_recvmsg_len) { in netlink_dump()
2709 alloc_size = nlk->max_recvmsg_len; in netlink_dump()
2710 skb = netlink_alloc_skb(sk, alloc_size, nlk->portid, in netlink_dump()
2717 skb = netlink_alloc_skb(sk, alloc_size, nlk->portid, in netlink_dump()
2739 mutex_unlock(nlk->cb_mutex); in netlink_dump()
2764 nlk->cb_running = false; in netlink_dump()
2765 mutex_unlock(nlk->cb_mutex); in netlink_dump()
2771 mutex_unlock(nlk->cb_mutex); in netlink_dump()
2782 struct netlink_sock *nlk; in __netlink_dump_start() local
2802 nlk = nlk_sk(sk); in __netlink_dump_start()
2803 mutex_lock(nlk->cb_mutex); in __netlink_dump_start()
2805 if (nlk->cb_running) { in __netlink_dump_start()
2815 cb = &nlk->cb; in __netlink_dump_start()
2825 nlk->cb_running = true; in __netlink_dump_start()
2827 mutex_unlock(nlk->cb_mutex); in __netlink_dump_start()
2842 mutex_unlock(nlk->cb_mutex); in __netlink_dump_start()
2996 struct netlink_sock *nlk; in __netlink_seq_next() local
3002 nlk = rhashtable_walk_next(&iter->hti); in __netlink_seq_next()
3004 if (IS_ERR(nlk)) { in __netlink_seq_next()
3005 if (PTR_ERR(nlk) == -EAGAIN) in __netlink_seq_next()
3008 return nlk; in __netlink_seq_next()
3011 if (nlk) in __netlink_seq_next()
3022 } while (sock_net(&nlk->sk) != seq_file_net(seq)); in __netlink_seq_next()
3024 return nlk; in __netlink_seq_next()
3071 struct netlink_sock *nlk = nlk_sk(s); in netlink_seq_show() local
3076 nlk->portid, in netlink_seq_show()
3077 nlk->groups ? (u32)nlk->groups[0] : 0, in netlink_seq_show()
3080 nlk->cb_running, in netlink_seq_show()
3196 const struct netlink_sock *nlk = data; in netlink_hash() local
3199 netlink_compare_arg_init(&arg, sock_net(&nlk->sk), nlk->portid); in netlink_hash()